Что-то странно. Я пытаюсь проверить, дает ли запрос хотя бы один объект в коллекции. Это всегда работало, но теперь это уже не так.
$myObj = User::whereRaw("lower(name) = '".strtolower(trim("toto"))."'");
if ( $myObj->count() > 0) {
\Log::info( "Good" );
}
Код перестает работать. но если я добавлю:
$myObj = User::whereRaw("lower(name) = '".strtolower(trim("toto"))."'");
\Log::info( $myObj->count() );
if ( $myObj->count() > 0) {
\Log::info( "Good" );
}
он отображает количество объектов, возвращенных запросом, прежде чем сломать код.
Что не так, пожалуйста?
Я не могу воспроизвести эту проблему, но я настоятельно рекомендую вам не делать этого. Запуск ->count() дважды приведет к двойному запуску оператора MySQL SELECT COUNT(*).... Если вы хотите получить коллекцию, а затем подсчитать, вам нужно сделать ->get() после whereRaw, и в этом случае count() будет подсчетом коллекции, который является операцией с постоянным временем.
Странно, но пока я перехожу на "пустой" метод. но я хотел бы понять, что не так, и почему я получаю такое поведение






Возможно, вы опускаете метод get() для получения всех записей, возможно, это может быть:
$myObj = User::whereRaw("lower(name) = '".strtolower(trim("toto"))."'")->get();
Да, это ответ. Я заметил это через несколько минут после моего сообщения, но я забыл разместить его здесь. Спасибо @eduardo. Надеюсь, это может помочь другим разработчикам laravel, если они пропустят это, как я. Спасибо всем
Пожалуйста, разместите код внутри оператора if