$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;
Приведенный выше код возвращает только все записи и никакие условия не применяются к результату. Я не уверен, что не так. Я хочу добавить условия в запросе для дочерней таблицы, связанной с родителем, но вернет родительские и дочерние данные, где применяется условие
дополнительный вопрос:
обновленный
Это по-прежнему записывает все данные, без каких-либо условий.
$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%’);
Вам нужно вложенное где:
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
Других решений пока нет …