[英]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.