基本逻辑稍微复杂一点点的,增删改查,都会用到关联模型 ORM ,以前总是,写得比较随心所欲,突然想总结一下,比较简单的写法,用来常用。
1、新增
场景:有一个很多数据的表单,因为数据太多,所以可能会将数据分为两张表,甚至更多,然后通过 表id进行关联。
public function store(CraneRequest $crane)
{
// 将 基础数据添加到 crane 表
// 这里之所以可以直接用 all() 方法,因为模型的白名单 fillable 属性
$crane = Crane::create($request->all()); // create 方法 返回新增的模型对象
// 给黑匣子表 添加数据, 黑匣子表示属于crane 的附表 用crane_id 关联着。
// 将 crane_id 添加到 $request 里
$request->merge(['crane_id' => $crane->id]);
BlackBox::create($request->all()); // 这里同样用 白名单。
}
复制代码
好处是 代码简洁, 充分利用白名单的优势。
2、编辑
场景:还是以上的新增图片的编辑
public function edit(Crane $crane)
{
// 利用模型对象的fill方法,直接加入关联的数据,避免用with,如果是后台模版渲染可以忽略。
$crane->fill(['blackBox' => $crane->blackBox]);
return $crane;
}
复制代码
3、删除
场景:删除前端传来的id数组,并删除对应的关联表数据。
public function destroy(Request $request)
{
Crane::destroy($request->id);
BlackBox::whereIn('crane_id', $request->id)->delete();
return ...
}
复制代码
这个删除可以勾选多个删除,也可以单选删除。不过感觉还不够简洁。