想象一下我想将多本书借给客户。
一个客户可以借很多本书(有很多),但是一本书只能借给一个客户(BelongsTo)。 我想一次性更改多本书关系的BelongsTo一侧。 Laravel Documentation表示要使用associate()函数。但据我所知,那是一次更改一个对象。因此,我必须像在massLoanOne中那样使用循环。这会产生很多查询(n + 1)。
执行此操作的另一种方法是直接更新Book模型上的customer_id,如massLoanTwo中一样。 这仅生成2个查询。但这不是正确的面向对象方式。
是否有更好的方法使用雄辩魔术来更新此一对多(反向)关系bij的BelongsTo端?
<?php
public function massLoanOne(MassLoanCustomerRequest $request)
{
foreach ($request->ids as $id) {
Book::find($id)->customer()->associate(Customer::find($request->customer_id))->save();
}
return response()->noContent();
}
public function massLoanTwo(MassLoanCustomerRequest $request)
{
Book::whereIn('id', request('ids'))->update(['customer_id' => $request->customer_id]);
return response()->noContent();
}
?>