laravel model 注意事项

王才英
2023-12-01

一、时间显示

在模型内定义时间格式,否则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);

四、预载入

???

五、user 模型授权

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...");
        });
    }
	...
}

注:批量更新时不会触发相应事件,因为直接走查询构建器完成的,绕过了模型方法。

 类似资料: