[英]Laravel Eloquent and Query Builder “with (nolock)”
我有一些麻烦,因为我的查询在from
子句之后没有with (nolock)
指令。
因为这样,一些查询会锁定数据库,然后没有人可以使用该系统。
如何将with (nolock)
与with (nolock)
& Query Builder 一起使用?
例如..在这个查询中:
return static::with('campaignType')
->where('active', 1)
->get();
我想要以下结果:
select
*
from campaigns with (nolock)
inner join campaign_types with (nolock) on campaign_types.id = campaigns.campaign_type_id
where campaigns.active = 1
这是我如何处理 eloquent(在 Laravel 5.1 和 5.2 上测试)
您需要在模型中添加范围:
public function scopeNoLock($query)
{
return $query->from(DB::raw(self::getTable() . ' with (nolock)'));
}
然后你可以这样称呼它
return Model::noLock()->get();
您可以像这样设置“with(nolock)”:
DB::table('campaigns')->lock('WITH(NOLOCK)')
简单的方法:
/**
* @param $query
* @return $this
*/
public function scopeNoLock($query)
{
return $query->from($query->getQuery()->raw(self::getTable() . ' with (nolock)'));
}
您也可以使用带有方法sharedLock的本机解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.