Laravel Eloquent和Query Builder" with(nolock)"

时间:2015-04-09 19:07:41

标签: php sql sql-server laravel eloquent

我有一些麻烦,因为我的查询在with (nolock)子句之后没有from指令。

因为这样,一些查询锁定数据库,然后没有人可以使用该系统。

如何使用with (nolock)与Eloquent&查询生成器?

例如..在此查询中:

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 

4 个答案:

答案 0 :(得分:2)

以下是我如何处理雄辩(在Laravel 5.1和5.2上测试)

您需要在模型中添加范围:

public function scopeNoLock($query)
{
    return $query->from(DB::raw(self::getTable() . ' with (nolock)'));
}

然后您可以将其称为

return Model::noLock()->get();

答案 1 :(得分:0)

简便方法:

/**
 * @param $query
 * @return $this
 */
public function scopeNoLock($query)
{
    return $query->from($query->getQuery()->raw(self::getTable() . ' with (nolock)'));
}

答案 2 :(得分:0)

您可以这样设置“ with(nolock)”:

DB::table('campaigns')->lock('WITH(NOLOCK)')

答案 3 :(得分:0)

您也可以通过sharedLock

方法使用本机解决方案