Laravel красноречивый, где условие не работает - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть таблица "items" с общим количеством строк данных = 11094, и есть 3 типа "status" (в ожидании, публикация sh и отклонение)

Вкл. MySQL Запрос

SELECT * FROM items WHERE status = 'pending' возвращает 1 строка
SELECT * FROM items WHERE status = 'publish' возвращает 11091 строки
SELECT * FROM items WHERE status = 'reject' возвращает 2 строки

Примечание: сумма результата отдельного запроса равна общему количеству строк.

Но в Laravel (5.4) Контроллер

$items = Items::where( 'status', '=', 'publish' )->paginate(40); возвращает 11091 строк

$items = Items::where( 'status', '=', 'reject' )->paginate(40); возвращает 0 строк (хотя 2 данные доступны в таблице)

$items = Items::where( 'status', '=', 'pending' )->paginate(40); возвращает 0 строк (хотя 1 данные доступны в таблице)

Я не могу понять, в чем проблема на самом деле. Пожалуйста, помогите.

1 Ответ

1 голос
/ 25 апреля 2020

Ваш запрос выглядит следующим образом.

select * from items where status = ? and items.deleted_at is null and status = ?

Есть два статуса в where, поскольку ваш код явно имеет только один.

$items = Items::where( 'status', '=', 'publish' )->paginate(40);

Я вполне уверен, что где-то в вашем коде у вас есть глобальная область видимости, которая фильтрует по статусу publi sh. Найдите их и выясните, как решить эту проблему.

Если вы сделаете следующее, мне очень хотелось бы поверить, что ваша логика c будет работать.

$items = Items::withoutGlobalScopes()->where( 'status', '=', 'reject' )->paginate(40);

$items = Items::withoutGlobalScopes()->where( 'status', '=', 'pending' )->paginate(40);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...