一对一关系:
A与B的关系: A(id) =B(a_id)
在主表A中加入方法b():return $this->hasOne('B');
在子表B中加入方法a():return $this->belongsTo('A');
一对多关系:
A与B的关系: A(id) =B(a_id)
在主表A中加入方法b():return$this->hasMany('B');
在子表B中加入方法a():return $this->belongsTo('A');
多对多关系:
A(id) B(id) C(a_id,b_id)
在主表A中加入方法bs():return $this->belongsToMany('B')->withPivot();
在子表B中加入方法as():return $this->belongsToMany('A');
一对多再对多关系:
A有n个B,每个B有n个C,求A有多少C;
在主表A中加入方法cs():return $this->hasManyThrough('C','B');
多态关系:
A(id) B(id) C(id,x_id,x_type)
A 表:c() :$this->morphMany('C','x');
B 表:c() :$this->morphMany('C','x');
C 表:x() :$this->morphTo();
查询关系存在性:
A(id) B(a_id)
至少有一个B :has('bs')
存在where的B:whereHas('bs',function($query){ $query->where(); })
预加载与A有关系的所有B: A::with('b');
带where的预加载:whth([ 'b'=>function($query){ $query->where(); } ]);
延迟(获取A数据后再预加载B)$a->load(b);
save() : 保存模型实例;
create() : 保存数组;
多对多关系的操作:
添加新B : attach($bid,['b_name'=>'name']);
删除某B:detach($id); 所有 detach();
更新中间表:updateExistingPivot($bid,['name'=>'name']);
同步关联(校准):$a->bs()->sync(1,2,3);
更新子表,父ID的updated_at也会更新:$touches=['post'];
本地约束查询:scopeA(); 调用 A::A()->get();
模型转数组:$a->toArray();
模型转json : $a->toJson();
加一些数据库不存在的值或自动改变字段:model中加 getXXXAttribute();(此方法自动加载)
自动修改某字段后保存:setXXXAttribute();
以上两种方法类似:$casts=['key'=>'needType'];
参考:https://laravel-china.org/articles/3818