Laravel Eloquent ORM 入门(1)

Laravel Eloquent ORM

创建模型

php artisan make:model User       // 默认对应的表是 users
php artisan make:model AbCd       // 默认对应的表是 ab_cds
/**
规则:
    1. 除第一个大写字母,其他大写字母前都加上下划线
    2. 所有的大写字母改成小写
    3. 末尾加 s
*/

创建数据表

php artisan make:migration create_identity_cards_table  
// 生成迁移文件,该文件是用来创建数据表的

php artisan migrate               // 运行迁移文件,即创建数据表
php artisan migrate:rollback      // 回滚迁移操作

填充数据表

php artisan make:seeder UsersTableSeeder


<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {

    }
}
我们可以将填充逻辑编写到 run 方法里:

public function run()
{
    DB::table('users')->insert([
        'name' => str_random(10),
        'email' => str_random(10).'@gmail.com',
        'password' => bcrypt('secret'),
    ]);
}

php artisan db:seed --class=UsersTableSeeder

模型之读

App\User::all();                          // 返回包含所有对象的集合
\App\User::where('name', 'John')->first(); // 返回对象
\App\User::where('id', 1)->value('name');   // 返回值,例如 'leon'
\App\User::find(3);                        // 返回主键等于 3 的对象
\App\User::find([1, 2]);                   // 返回主键等于 1 和 2 的对象的集合
\App\User::pluck('age');                   // 返回包含字段值的集合
\App\User::pluck('age', 'id');             // 返回关联集合 id => age,pluck 最多 2 个参数
\App\User::count();                        // 返回记录总数
\App\User::max('id');                      // 返回数字,库没有任何记录返回 null
\App\User::min('id');                      // 返回数字,库没有任何记录返回 null
\App\User::avg('age');                     // 返回数字,库没有任何记录返回 null,同名 averge
\App\User::sum('salary');                  // 返回数字,库没有任何记录返回 0

select

$users = \App\User::select('name', 'email as user_email')->get();

$users = \App\User::distinct()->get();
// select distinct * from `users1`

$query = \App\User::select('name');
$users = $query->addSelect('age')->get();
// select `name`, `age` from `users`


->selectRaw('department, SUM(price) as total_sales')
->groupBy('department')
->havingRaw('SUM(price) > ?', [2500])
->orderByRaw('updated_at - created_at DESC')
->get();

排序、分组和分页

orderBy('name', 'desc')

latest()                // === orderBy('created_at', 'desc')

inRandomOrder()
// order by RAND()

->groupBy('account_id')->having('account_id', '>', 100)

->groupBy('site', 'qianjinyike.com')->having('account_id', '>', 100)

skip(10)->take(5)        // 等价于 offset(10)->limit(5)
// limit 5 offset 10

分支执行 sql

// $role 有值才会执行闭包
$role = $request->input('role');

$users = \App\User::when($role, function ($query) use ($role) {
                    return $query->where('role_id', $role);
                })
                ->get();

// $sortBy 有值执行第一个闭包,否则执行第二个闭包
$sortBy = null;
$users = \App\User::when($sortBy, function ($query, $sortBy) {
                    return $query->orderBy($sortBy);
                }, function ($query) {
                    return $query->orderBy('name');
                })
                ->get();
上一篇:【laravel】Eloquent 模型事件和监听方式


下一篇:2021-02-17