Как можно отфильтровать коллекцию по связи laravel?

Рейтинг: 0Ответов: 0Опубликовано: 14.08.2025

Всем привет. Есть модель со связью один ко многим.

class MyModel extends Model
{
    use HasFactory;
    public function relation_all()
    {
      return $this->hasMany(MyModel1::class, 't1_id', 'id')->with('next_relation');
    }
}

Я получаю коллекцию с relation = relation_all вот так:

$res = MyModel::with('relation_all')->where('url', $url)->first();

Таким образом получаю 1 запись из Таблицы 1, и все связанные с ней записи из Таблицы 2, которые отображаются в relations.

Задача заключается в следующем. У каждой записи в Таблице 1, может быть много записей в Таблице 2, и нужно получить конкретную запись Таблицы 1, но не все связанные записи из Таблицы 2, а только те, которые удовлетворяют условию, например которые имеют в поле "tag" со значениями "f1" и "f2".

Пробовал так:

$res = MyModel::with(['relation_all' => function($q){
    $q->where('tag', 'f1')->merge($q->where('tag', 'f2'));
}])->where('url', $url)->first();

У меня ошибка, менял merge() на union() тоже ошибка. Как мне можно это всё сделать?

Ответы

Ответов пока нет.