使用说明:
继承:Illuminate\Database\Eloquent\Model
创建模型实例:php artisan make:model User
创建模型实例并生成migration文件:php artisan make:model User -m
或php artisan make:model User --migration
默认约定:小写的模型类名复数格式作为与其对应的表名
Model类属性说明:
protected $table = 'my_flights';//指定表名
protected $primaryKey = 'uid';//指定主键名默认为id
protected $incrementing = false;//非自增主键时默认自增
protected $keyType = 'string';//主键不是整型时
protected $timestamps = false;//不自动维护created_at和updated_at时间戳字段
const CREATED_AT = 'creation_date';//自定义用于存储时间戳的字段名称
const UPDATED_AT = 'last_update';//自定义用于存储时间戳的字段名称
protected $connection = 'connection-name';//使用指定的数据库连接
protected $fillable = ['name'];//定义哪些属性是可以进行赋值
protected $guarded = ['price'];//定义哪些属性是不能进行赋值
Model类方法使用:
在对应的PHP文件中use需要的Model的命名空间(如:use App\Flight;
)
获取全部数据(all 和 get)
$flights = App\Flight::all();
获取指定条件数据
$flights = App\Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get();
以上返回值均为对象,参考以下使用方式
foreach ($flights as $flight) {
echo $flight->name;
}
分块处理结果集减少内存消耗
Flight::chunk(200, function ($flights) {
foreach ($flights as $flight) {
//
}
});
获取单个数据(find 和 first)
$flight = App\Flight::find(1);//通过主键获取单条数据
$flight = App\Flight::where('active', 1)->first();//通过指定条件获取单条数据
$flights = App\Flight::find([1, 2, 3]);//主键获取方式支持多个
$model = App\Flight::findOrFail(1);//无数据时抛出异常
$model = App\Flight::where('legs', '>', 100)->firstOrFail();//无数据时抛出异常
count、sum、max使用:
$count = App\Flight::where('active', 1)->count();
$max = App\Flight::where('active', 1)->sum('price');
$max = App\Flight::where('active', 1)->max('price');
创建和更新数据:
$flight = new Flight;
$flight->name = $request->name;
$flight->save();//创建
$flight = App\Flight::find(1);
$flight->name = 'New Flight Name';
$flight->save();//更新
批量更新:
App\Flight::where('active', 1)
->where('destination', 'San Diego')
->update(['delayed' => 1]);
快速创建:
$flight = App\Flight::create(['name' => 'Flight 10']);
$flight = new Flight;
$flight->fill(['name' => 'Flight 22']);
其他情况(firstOrCreate,firstOrNew,updateOrCreate):
$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);//不存在则创建
$flight = App\Flight::firstOrCreate(
['name' => 'Flight 10'], ['delayed' => 1]
);//通过name获取航班如果不存在则通过name和delayed属性创建
$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);//通过属性获取航班不存在初始化一个新的实例
$flight = App\Flight::firstOrNew(
['name' => 'Flight 10'], ['delayed' => 1]
);//通过name获取航班如果不存在则通过name和delayed属性创建
$flight->save();//firstOrNew需要手动保存
$flight = App\Flight::updateOrCreate(
['departure' => 'Oakland', 'destination' => 'San Diego'],
['price' => 99]
);//如果有从奥克兰到圣地亚哥的航班则将价格设置为$99没有匹配的模型则创建
删除:
$flight = App\Flight::find(1);
$flight->delete();//通过主键删除
App\Flight::destroy(1);//快速通过主键删除
App\Flight::destroy([1, 2, 3]);//快速通过主键删除
App\Flight::destroy(1, 2, 3);//快速通过主键删除
$deletedRows = App\Flight::where('active', 0)->delete();
//按条件批量删除
软删除:
protected $dates = ['deleted_at'];//定义Model属性
Schema::table('flights', function ($table) {
$table->softDeletes();
});//快速添加deleted_at列到flights数据表
if ($flight->trashed()) {
//
}//是否被软删除
$flights = App\Flight::withTrashed()
->where('account_id', 1)
->get();//软删除模型将会自动从查询结果中排除,此方式可将软删除数据出现在查询结果中
$flight->history()->withTrashed()->get();//withTrashed方法也可以用于关联查询中
$flights = App\Flight::onlyTrashed()
->where('airline_id', 1)
->get();//onlyTrashed方法只获取软删除数据
$flight->restore();//恢复一个被软删除的数据
App\Flight::withTrashed()
->where('airline_id', 1)
->restore();//批量恢复
$flight->history()->restore();//批量恢复
#### 永久删除:
$flight->forceDelete();//单个永久删除
$flight->history()->forceDelete();//批量永久删除
查询作用域:
全局作用域(给定模型的所有查询添加条件约束)
http://laravelacademy.org/post/8855.html
使用匿名的全局作用域可避免创建Scope类
使用本地作用域(Model里面定义常用的查询条件供调用时复用)
动态作用域(将作用域参数在调用时动态传入)
$users = App\User::ofType('admin')->get();
回调事件:
Eloquent 模型可以触发事件,允许你在模型生命周期中的多个时间点调用如下这些方法:retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored
。事件允许你在一个指定模型类每次保存或更新的时候执行代码。