我有这个全球范围:
class EarmarkScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$builder->leftJoin('users', 'users.id', '=', 'earmarks.by_id')
->leftJoin('locations', 'locations.id', '=', 'earmarks.location_id')
->select('earmarks.*', 'users.name AS by', 'locations.location')
->orderBy('date', 'ASC');
}
}
但是在尝试致电时:Earmark::destroy($id);
我收到此错误:
SQLSTATE [23000]:完整性约束违规:1052列'id' where子句不明确(SQL:选择
earmarks
。*,users
。name
asby
,locations
location
来自earmarks
左加入users
users
。id
=earmarks
。by_id
离开加入locations
locations
。id
=earmarks
。location_id
其中id
符号(72) 由date
asc)
我意识到全局范围正在导致这种情况,但是有了这个范围可以节省我这么多时间在SELECT查询上。如何避免导致destroy()
和其他有用的Laravel函数(例如find()
)出现问题?
答案 0 :(得分:0)
你在这里做错了。
一个。在模型上设置关系。这里绝对不需要全球范围。
B中。不要在全局范围内使用join
,而是使用whereIn
$builder->whereIn(
'by_id', function ($q) {
$q->select('users.id')
->from('users')
->where('something useful...');
}
);