Laravel Eloquent - условная выборка данных - PullRequest
0 голосов
/ 26 мая 2019

У меня есть таблица клиентов и групп клиентов.Я хочу искать клиентов на основе термина / фильтра текста.

Скажем, есть два customer_group_id, 7 и 8. Когда 8, мне нужно будет найти мобильные поля в предложении orWhere, в противном случае нет.

То, что я пробовал, это

$contacts = Contact::where(function ($query) use ($term) {
    $query->where('contacts.name', 'like', '%' . $term .'%')
});

// For customer_group_id=8
$contacts->when('customer_group_id=8', function($q) use ($term){
    return $q->orWhere('mobile', 'like', '%' . $term .'%');
});

when() не работает.Это показывает все результаты.Я знаю, что должен передать любой boolean value в первый параметр функции when().

Есть ли какое-либо решение для этой проблемы?Или как я могу получить данные.

1 Ответ

1 голос
/ 26 мая 2019

Метод when() не добавляет оператор if к вашему запросу, это всего лишь способ избавить вас от написания оператора if в вашем коде.

Для достижения того, что вы ищетеможно использовать вложенное предложение orWhere():

$contacts = Contact::where('name', 'like', '%' . $term . '%')
    ->orWhere(function ($query) use($term) {
        $query->where('customer_group_id', 8)->where('name', 'like', '%' . $term . '%');
    })
    ->get();

Если в вашем запросе есть что-то большее, чем то, что вы задали в своем вопросе, то вы можете просто обернуть вышеупомянутое в другое предложение where:

$contacts = Contact::where(function ($query) use ($term) {
    $query->where('name', 'like', '%' . $term . '%')
        ->orWhere(function ($query) use ($term) {
            $query->where('customer_group_id', 8)->where('name', 'like', '%' . $term . '%');
        });
})
    ->where('some column', 'some value')
    ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...