【发布时间】:2019-10-01 21:51:17
【问题描述】:
我的供应商模型上有一个范围,它返回active = true 的结果。
这在创建新条目时非常有用,因为我只希望用户看到活跃的供应商。
当前条目可能有一个不活跃的供应商;当我编辑它时,我想查看所有活动的供应商,以及当前的供应商(如果它是非活动的)
我的控制器中有这段代码:
$suppliers = Supplier::active()->get();
if (!$suppliers->contains('id', $record->supplier->id))
{
$suppliers->add(Supplier::find($record->supplier->id));
}
两个问题:这是正确的方法吗?这段代码应该在我的控制器中还是应该在其他地方? (也许是一个范围,但我不知道如何编码)。
编辑:
感谢各位的帮助。我已经从每个答案中应用了建议,并将我的代码重构到一个新的范围内:
public function scopeActiveIncluding($query, Model $model = null)
{
$query->where('active', 1);
if ($model && !$model->supplier->active)
{
$query->orWhere('id', $model->supplier->id);
}
}
【问题讨论】:
标签: laravel eloquent controller