在模型内定义时间格式,否则model返回 "2020-08-13T03:36:53.000000Z"格式
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use DateTimeInterface;
class Models extends Model{
protected function serializeDate(DateTimeInterface $date)
{
return $date->format($this->dateFormat ?: 'Y-m-d H:i:s');
}
//或在模型内使用attr方法
public function getCreateTimeAttribute($value){
return $value;
}
}
使用 model1::firstOrCreate()时需在模型内定义fillable,如
class Model1 extends Models{
protected $connection = 'connection_name';//数据库连接
public $timestamps = false;//如果表不含created_at 和 updated_at字段,或只含一个,都需设 $timestamps=false。或通过 CREATED_AT 和 UPDATED_AT 常量设置自定义字段名:
const CREATED_AT = 'create_time';
const UPDATED_AT = null;
protected $dateFormat = 'U';//默认时间存储格式 Y-m-d H:i:s,或通过$dateFormat属性自定义时间戳格式,该属性值通过date() 函数解析
protected $fillable = ['name', 'user_id', 'status'];
protected $dates = ["creat_at"]
protected $casts = [ //定义字段属性
'is_directory' => 'boolean',
];
...
}
在模型查询操作中对查询结果进行排序和分页:
$posts = Post::where('views', '>', 0)->orderBy('id', 'desc')->offset(10)->limit(5)->get();
//或使用分页器
$users = DB::table('users')->paginate(15);
???
Laravel 的 User 模型提供两个用于授权动作:can 和 cant。can 方法接收要授权的动作和对应的模型作为参数。如下,判断用户是否被授权更新给定的 Post 模型:
if ($user->can('update', $post)) {}
方法 | 功能 |
---|---|
retrieved | 获取到模型实例后触发 |
creating | 插入到数据库前触发 |
created | 插入到数据库后触发 |
updating | 更新到数据库前触发 |
updated | 更新到数据库后触发 |
saving | 保存到数据库前触发(插入/更新之前,无论插入还是更新都会触发) |
saved | 保存到数据库后触发(插入/更新之后,无论插入还是更新都会触发) |
deleting | 从数据库删除记录前触发 |
deleted | 从数据库删除记录后触发 |
restoring | 恢复软删除记录前触发 |
restored | 恢复软删除记录后触发 |
class Model1 extends Models{
...
public static function boot(){
parent::boot();
static::creating(function (Area $area) {
info("Model [Area] creating...");
});
}
...
}
注:批量更新时不会触发相应事件,因为直接走查询构建器完成的,绕过了模型方法。