Laravel 5.7: QueryBuilder Get возвращает все записи, даже если выполнение пользовательского запроса не возвращает никаких записей

Это действительно странно, я работаю над своим веб-сайтом, связанным с недвижимостью, и у меня есть две таблицы users и user_metas, где пользовательская таблица содержит все основные сведения о пользователе, а user_metas содержит всю метаинформацию. пользователя.

Структура таблицы user_metas

----------------------------------------------------------------------
  id   |   user_id   |   key   |   value   | created_at |  updated_at
----------------------------------------------------------------------
   1   |     2       |   age   |    20     | 2019-17-01 | 2019-17-01
----------------------------------------------------------------------
   2   |     3       |   age   |    40     | 2019-17-01 | 2019-17-01

и я просто выполняю запрос:

(new User)->newQuery()->where('user_type','rn')->with(['usermeta' => function($query) use ($minAge, $maxAge){
       return $query->where('key','age')->where('value','>=',$minAge);
   }])->whereHas('usermeta', function($query) use ($minAge, $maxAge){
       return $query->where('key','age')->where('value','>=',$minAge);
 })->toSql();

toSql() возвращая мне:

Laravel 5.7: QueryBuilder Get возвращает все записи, даже если выполнение пользовательского запроса не возвращает никаких записей

когда я выполняю этот запрос в phpmyadmin, он ничего мне не возвращает, но laravel get() возвращает мне все записи.

может кто-нибудь, пожалуйста, скажите мне, где я ошибаюсь?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
37
1

Ответы 1

Это связано с тем, что активно загружаемые отношения (usermeta в вашем случае) выполняются как отдельный SQL-запрос. Затем они сопоставляются с моделью User с помощью PHP, а не на уровне вашей базы данных.

так есть ли решение?

Rahul Sharma 19.01.2019 08:10

я думаю, что этого не должно происходить, это сбивает с толку, сообщество laravel должно знать об этом.

Rahul Sharma 19.01.2019 08:12

Если вам нужен один запрос, вы должны использовать обычные соединения вместо нетерпеливой загрузки Laravel.

Amade 19.01.2019 08:12

Это я понял только несколько месяцев назад - меня это тоже смутило. Что мне очень помогло в понимании того, как работают нетерпеливые загрузки, так это «Панель отладки Laravel»: github.com/barryvdh/laravel-debugbar

Amade 19.01.2019 08:14

Другие вопросы по теме