Laravel 雄辩的全局作用域干扰删除请求
我有这样一个全球范围:Laravel 雄辩的全局作用域干扰删除请求,laravel,eloquent,Laravel,Eloquent,我有这样一个全球范围: class EarmarkScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->leftJoin('users', 'users.id', '=', 'earmarks.by_id') ->leftJoin('locations', 'locations.id', '=', 'e
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:selectearmarks
*,users
name
as)
由
,位置
位置
来自专用标记
左侧加入用户
打开
用户
id
=按id指定用途
位置
id
=专用标记
location\u id
其中id
按(72)顺序排列
截止日期(asc)
我意识到是全局范围导致了这一点,但拥有该范围可以节省我在选择查询上的大量时间。我如何避免它导致destroy()
和其他有用的Laravel函数(如find()
)出现问题?您在这里做得非常错误
A.在模型上建立关系。这里绝对不需要全局范围
B.不要在您的全球范围内使用join
s,而是使用where
$builder->whereIn(
'by_id', function ($q) {
$q->select('users.id')
->from('users')
->where('something useful...');
}
);
你在这里做错了
A.在模型上建立关系。这里绝对不需要全局范围
B.不要在您的全球范围内使用join
s,而是使用where
$builder->whereIn(
'by_id', function ($q) {
$q->select('users.id')
->from('users')
->where('something useful...');
}
);
如果您使用Earmark::withoutGlobalScope(EarmarkScope::class)->destroy($id)
,会发生什么情况?我得到调用undefined方法illights\Database\Query\Builder::destroy()
如果您不介意,您使用的是哪种LAVEL版本?无论如何,它没有应用作用域来销毁东西..我使用的是Laravel 5.3怪异,模型在删除时不应该触发任何作用域。您是如何调用查询的,它只是Earmark::destroy($id)代码>。。?或者,您可以这样做吗?如果您使用Earmark::withoutGlobalScope(EarmarkScope::class)->destroy($id)
,会发生什么情况?我得到调用undefined方法illumb\Database\Query\Builder::destroy()
如果您不介意的话,您使用的是哪一个LAVEL版本?无论如何,它没有应用作用域来销毁东西..我使用的是Laravel 5.3怪异,模型在删除时不应该触发任何作用域。您是如何调用查询的,它只是Earmark::destroy($id)代码>。。?或者,你能做些什么?