Как добавить ограничение для активной нагрузки в модели Laravel - PullRequest
0 голосов
/ 06 июня 2019

Я использую $ со свойством в модели для энергичных отношений загрузки, и теперь мне нужно добавить ограничение для активной нагрузки. как я могу это сделать?

простая нагрузка:

class Category extends Model
{

    protected $table = 'categories';

    protected $fillable = ['slug', 'lang','category', 'complex_id'];

    protected $with = ['items'];

}

что я хочу сделать, это примерно так:

class Category extends Model
{
    protected $table = 'categories';

    protected $fillable = ['slug',  'lang', 'category', 'complex_id'];

    protected $with = ['items' => function ($q) {
        $q->where('lang', 'en');
    }];
}

но это не разрешено в php, и я получаю исключение "Константа содержит недопустимые операции".

также можно добавить другое отношение, например:

public function englishItems()
{
     return $this->hasOne('App\Item', 'category_id')->where(['lang' => 'en']);
}

и используйте его в $ со свойством, но при этом имя отношения изменяется, и нам нужно создать отношение для языка и некоторые другие проблемы.

спасибо.

1 Ответ

1 голос
/ 07 июня 2019

Я считаю, что вы хотите загружать английские предметы каждый раз, когда получаете категории.

Я думаю, что это идеальный вариант использования для глобальной области:

https://laravel.com/docs/5.8/eloquent#global-scopes

Таким образом, в модели категории вы можете определить что-то вроде этого:

class Category extends Model
{
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope('withEnglishItems', function (Builder $builder) {
                $builder->with(['items' => function ($query) {
                    $query->where('lang', 'en');
                }]);
        });
    }
}
...