Laravel Eloquent или Где проблемы - PullRequest
0 голосов
/ 03 июля 2018

Бродить, что не так с моим запросом, должно быть так просто, как кажется. это больше похоже на то, что я создаю select * из таблицы, где (a = 1 и b = 2) или (a = 2 и b = 1) тип запроса. Вот мой красноречивый.

return $query->where(function($q) use ($brand, $influencer, $agency){
    $q->where([
        'sender_id' => $brand,
        'receiver_id' => $influencer
    ]);
    $q->orWhere([
        'sender_id' => $influencer,
        'receiver_id' => $brand
    ]);
});

У меня есть этот запрос в моем eloquent, но при отображении в панели отладки он показывает

select count(*) as aggregate
from `chat_messages`
where ((`sender_id` = '415' and `receiver_id` = '1159')
or (`sender_id` = '1159' or `receiver_id` = '415'))

и я хотел, чтобы это было "И" во второй группе скобок

select count(*) as aggregate
from `chat_messages`
where ((`sender_id` = '415' and `receiver_id` = '1159')
or (`sender_id` = '1159' AND `receiver_id` = '415'))

1 Ответ

0 голосов
/ 03 июля 2018

Если вы вызываете orWhere() с массивом, он использует OR впереди и между отдельными ограничениями.

Используйте это:

return $query->where(function($q) use ($brand, $influencer, $agency){
    $q->where([
        'sender_id' => $brand,
        'receiver_id' => $influencer
    ])->orWhere(function($q) use ($brand, $influencer) {
        $q->where([
            'sender_id' => $influencer,
            'receiver_id' => $brand
        ]);                
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...