Загрузка Laravel Eager с вложенным ИЛИ условием

$query = LeadsModel::with(
array(
'emails' => function ($q) use ($inputs)
{
$q->orwhere('email','like',"%john%");
$q->orwhere('email','like',"%mark%");
}
)
)
->whereHas
(
'emails', function ($q) use ($inputs)
{
$q->orwhere('email','like',"%john%");
$q->orwhere('email','like','%mark%');
}
);

$res = $query->get();

display_output($res);
return;

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

дополнительный вопрос:

  • Как я могу добавить несколько условий ИЛИ во вложенном состоянии при активной загрузке?
  • как я могу контролировать приоритетность условия? Допустим, у меня будет 2 или 3 условия в том же приоритете, и у меня будет другое условие с условием AND во вложенном состоянии загрузки.

обновленный

Это по-прежнему записывает все данные, без каких-либо условий.

    $query = LeadsModel::with(
array(
'emails' => function ($q) use ($inputs)
{
$q->orWhere('email','like',"%john%");
$q->orWhere('email','like',"%james%");
}
)
)
->whereHas
(
'emails', function ($q) use ($inputs)
{
$q->where('email','like',"%john%")->orWhere('email','like','%james%');
}
);

$res = $query->get();

display_output($res);
return;

в нормальном sql я думаю, это будет

выберите приводит.,lead_detail_emails. от приводит, lead_detail_emails где
lead.id = lead_detail_emails.lead_id и
(lead_detail_emails.email как ‘% john%’ ИЛИ ​​lead_detail_emails.email как ‘% james%’);

1

Решение

Вам нужно вложенное где:

whereHas('emails', function ($q)
{
$q->where(function ($q) {
$q->where('email','like',"%john%")
->orWhere('email','like','%mark%');
});
})

Это пример запроса для whereHas с сводной таблицей (belongsToMany):

select * from `table`
where `table`.`deleted_at` is null
and (select count(*) from `related_table` inner join `pivot_table` on `related_table`.`id` = `pivot_table`.`related_id`
where `pivot_table`.`user_id` = `table`.`id`
and (`some_field` like ? or `some_field` like ?)) >= 1
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]