Я получаю следующую ошибку
(1/1) ErrorException
compact(): Undefined variable: operator
Это моя строка кода
$postsCat = Post::whereHas('Cat', function($query) use ($sreachWord) {
return $query->whereRaw('name REGEXP"'.sql_text_to_regx($sreachWord).'"');
})->orderBy('top','desc')
->orderBy('updated_at','desc')
->paginate(30);
Почему это происходит? Это из-за моей версии PHP (7.3) или чего-то еще?
Да, PHP7.3 внес это критическое изменение. У нас есть много кода, на который это влияет — мы не собираемся возвращаться и исправлять, поэтому, к сожалению, застряли с 7.2 на множестве устаревших систем. Вы можете установить переменную в null, и 7.3 примет ее.
@ Богдан да та же версия
запустите команду «обновление композитора», чтобы исправить это.






Пожалуйста, обратитесь к этому https://github.com/laravel/framework/issues/26936
Версия Laravel должна быть обновлена.
Перейти к вашему проекту в
vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php
В строке номер 1337 вы можете найти ниже код внутри метода addWhereExistsQuery
$this->wheres[] = compact('type', 'operator', 'query', 'boolean');
Вы просто удаляете параметр «оператор».
И я надеюсь, что это будет работать нормально.
Спасибо, @Hasanur. В моем случае дефектный код был найден в строке 1229 Builder.php. Изучив этот код, я удалил operator, как вы рекомендуете, и вызов addWhereExistsQuery() прошел успешно. Тем не менее, я думаю, вы должны добавить, что это обходной путь только для этого конкретного случая более крупной проблемы, описанной здесь: PHP 7.3+, отвергающий неопределенные переменные.
yesssssss, просто удалите параметр "оператор" ,,,, большое спасибо
Большое спасибо ... вы спасли мой день .. @Hasanur Kareimovich, вы должны принять это, если вы тоже работаете на вас.
Это хакерское решение, и его следует использовать только в том случае, если по какой-либо причине невозможно обновить версию Laravel.
@Хасанур Рахман Химел. У меня также есть эта проблема, изучающая последние два часа. Вот точное решение, которое я нашел. Спасибо, что сэкономили мое время. В моем случае это 1229 строка.
это неправильный путь, так как данный файл может быть перезаписан при любом обновлении. "обновление композитора" решит эту проблему
@AkashSethi Решение не работает в Laravel 8, параметра больше нет, и проблема сохраняется. Вы наткнулись на обновленное решение?
Я сделал это, но не идеальное решение, потому что ошибка перешла в gammer.php в операторе того же слова.....!
Вместо того, чтобы передавать переменную методу compact(), вы передадите ему имя переменной в виде строки без символа доллара.
$postsCats = Post::all(); // example
return view('posts.index', compact('postsCats'));
Если вы не можете обновить свой Laravel, вы можете просто изменить запрос Query на RAW, у меня это сработало.
Есть 2 исправления для этой проблемы
$posts = Post::latest()->get();
return view('author.post.index', compact('posts'));
Хотя ваш фрагмент кода может дать ответ на вопрос, предоставление дополнительного контекста относительно того, почему и/или как работает ваш фрагмент кода, повышает его ценность в долгосрочной перспективе.
Последняя версия PHP не позволяет использовать неопределенные переменные. Вместо удаления последней версии можно переключаться между версиями. Установите более раннюю версию, скажем, PHP7.2, как указано здесь.. Затем установите эту версию как предпочтительную, запустив sudo update-alternatives --set php /usr/bin/php7.2 на вашем терминале Ubuntu. Тогда беги composer update
Вы используете Laravel 5.4 и PHP 7.3?