Это действительно странно, я работаю над своим веб-сайтом, связанным с недвижимостью, и у меня есть две таблицы 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() возвращая мне:
когда я выполняю этот запрос в phpmyadmin, он ничего мне не возвращает, но laravel get() возвращает мне все записи.
может кто-нибудь, пожалуйста, скажите мне, где я ошибаюсь?






Это связано с тем, что активно загружаемые отношения (usermeta в вашем случае) выполняются как отдельный SQL-запрос. Затем они сопоставляются с моделью User с помощью PHP, а не на уровне вашей базы данных.
я думаю, что этого не должно происходить, это сбивает с толку, сообщество laravel должно знать об этом.
Если вам нужен один запрос, вы должны использовать обычные соединения вместо нетерпеливой загрузки Laravel.
Это я понял только несколько месяцев назад - меня это тоже смутило. Что мне очень помогло в понимании того, как работают нетерпеливые загрузки, так это «Панель отладки Laravel»: github.com/barryvdh/laravel-debugbar
так есть ли решение?