我正在寻找解决此问题的有效方法:
我有一个与Prog模型有belongsToMany关系的服务模型。
Service Model:
public function relatedProgs(){
return $this->belongsToMany('\App\Prog');
}
在服务表单上,用户可以通过带有$ id => $ name的多选来附加任意数量的Prog。有一个选项可以选择" ALL",它只是通过jquery填写表格中的所有编程。这很愚蠢,因为有数百个Progs。
当然,我不必通过jquery将它们全部添加到表单中 - 我可以在后端添加代码,将它们添加到数据库中...但是我真的很喜欢do只是添加" -1"到DB并没有添加所有数百个模型附加。保持DB较小,然后在关系为-1时,只需将其他页面上的所有内容都插入。
有一种简单/聪明的方法吗?没有id为-1的模型,它将失败,因为prog没有-1 id。我可以创建一个" ALL" Prog模型,但这显然会搞砸其他领域。
答案 0 :(得分:0)
也许没有一种优雅的方式来做到这一点。也许有人会得到一个更好的答案。现在,我会发布我所做的事情,以防将来有人在寻找答案,虽然对我来说似乎很苛刻。
Multi-select允许用户添加任意数量的应用。这将使用relatedProgs-> attach / sync方法直接输入到DB表prog_service中,就像正常一样。
如果用户想要为此服务在数据库(数百个)中添加所有应用程序,他们可以在多选中单击“所有应用程序”。存储/更新方法捕获此-1 id并在prog_service表中输入NO关系,表单jquery也不填充选择框。相反,Laravel方法只是将Service模型上的新bool字段all_progs_related指定为true。
优点:
缺点:
Hackish / non-Eloquent(只为所有应用程序的布尔值时无法加载)
触及所有应用程序附加服务的每一段代码都必须牢记逻辑。
IE:
if($service->all_progs_related)
$appList = \App\Prog::all();
else
$appList = \App\Prog::whereIn('id', $service->relatedProgs->pluck('id')->get();