簡體   English   中英

Laravel Eloquent 和 Query Builder “with (nolock)”

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM