【问题标题】:Laravel 5.2 eloquent query with local scopeLaravel 5.2 具有本地范围的雄辩查询
【发布时间】:2017-01-15 05:37:30
【问题描述】:

我想知道是否可以通过连接或子查询在两个或多个模型之间使用 Laravel 的本地范围?

例如,这是作用域处于活动状态的用户模型。

class User extends Model
{
    public function scopeActive($query)
    {
      return $query->where('active', 1);
    }
}

其他模型是具有范围的 UserSubscription。

class UserSubscription extends Model
{
    public function scopeType($query, $type)
    {
      return $query->where('type', $type);
    }
}

如何在单个查询中同时使用两个范围?以下语句将不起作用。

$users = Users::active()
        ->join('UserSubscription', 'users.id', '=','UserSubscription.user_id')
        ->UserSubscription::type()
        ->get();

我正在使用 Laravel 5.2。 https://laravel.com/docs/5.3/eloquent#local-scopes

【问题讨论】:

    标签: laravel eloquent local scopes


    【解决方案1】:

    如果您在两个模型类中都建立了正确的模型关系,则可以进行如下查询:

    $users= User::where('active', 1)->whereHas('user_subscriptions', function ($query) {
        $query->where('type', $type);
    })->get();
    

    【讨论】:

    • 其实我并不想因为性能问题而使用Laravel模型关系。此外,我想利用本地范围。即 $users = Users::active()->join('user_subscriptions', 'users.id', '=','user_subscriptions.user_id') ->UserSubscription::type() ->get(); @lewis4u
    • 但据我所知,范围是基于雄辩的。我想知道您是否可以发布一个链接或一些具有雄辩性能问题的示例。
    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2018-01-26
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多