Сделайте условные красноречивые отношения в Laravel - PullRequest
2 голосов
/ 17 июня 2019

Ларавел 5.7. У меня есть модель Eloquent Theme, с двумя полями, id и name.

Другая модель, Filter, имеет три поля: id, name, theme_id.

Фильтр:

class Filter extends Model
{
    public function theme()
    {
        return $this->belongsTo('App\Theme');
    }
}

Я могу прикрепить эти фильтры к произвольному числу других моделей, например, модель Foo имеет два поля: id и name. Я прикрепляю к нему фильтр, используя таблицу Filterables:

Filterables:

id | filter_id | filterable_id | filterable_type
------------------------------------------------
1  |  1        |  3            |  App\Foo

Приведенный выше пример показывает, что Filter из id 1 присоединено к Foo из id 3.

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

Foo:

class Foo extends Model
{
    public function filters()
    {
        return $this->morphToMany('App\Filter', 'filterable');
    }
}

Это все отлично работает. Но теперь я хочу получить модель Foo, и только те фильтры, для которых theme_id (например) 1.

Как добавить это условие в отношения filters?

1 Ответ

0 голосов
/ 17 июня 2019

Просто добавьте предложение where непосредственно в ваши отношения

class Foo extends Model
{
    public function filters()
    {
        return $this->morphToMany('App\Filter', 'filterable')->where('theme_id', 1);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...