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();