Как можно отфильтровать коллекцию по связи laravel?
Всем привет. Есть модель со связью один ко многим.
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() тоже ошибка. Как мне можно это всё сделать?
Источник: Stack Overflow на русском