Compact(): неопределенная переменная: оператор

Я получаю следующую ошибку

  (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) или чего-то еще?

Вы используете Laravel 5.4 и PHP 7.3?

Bogdan 23.06.2019 19:33

Да, PHP7.3 внес это критическое изменение. У нас есть много кода, на который это влияет — мы не собираемся возвращаться и исправлять, поэтому, к сожалению, застряли с 7.2 на множестве устаревших систем. Вы можете установить переменную в null, и 7.3 примет ее.

Watercayman 23.06.2019 19:39

@ Богдан да та же версия

Kareimovich 24.06.2019 08:58

запустите команду «обновление композитора», чтобы исправить это.

MrMojoRisin 12.02.2020 17:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
31
4
43 396
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Пожалуйста, обратитесь к этому 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+, отвергающий неопределенные переменные.

CODE-REaD 21.02.2020 21:57

yesssssss, просто удалите параметр "оператор" ,,,, большое спасибо

saber tabatabaee yazdi 03.06.2020 02:12

Большое спасибо ... вы спасли мой день .. @Hasanur Kareimovich, вы должны принять это, если вы тоже работаете на вас.

MD Alauddin Al-Amin 05.08.2020 21:17

Это хакерское решение, и его следует использовать только в том случае, если по какой-либо причине невозможно обновить версию Laravel.

Fusion 11.01.2021 00:01

@Хасанур Рахман Химел. У меня также есть эта проблема, изучающая последние два часа. Вот точное решение, которое я нашел. Спасибо, что сэкономили мое время. В моем случае это 1229 строка.

Assad Yaqoob 18.02.2021 07:19

это неправильный путь, так как данный файл может быть перезаписан при любом обновлении. "обновление композитора" решит эту проблему

Tousif 23.02.2021 11:49

@AkashSethi Решение не работает в Laravel 8, параметра больше нет, и проблема сохраняется. Вы наткнулись на обновленное решение?

Peter 14.06.2021 02:41

Я сделал это, но не идеальное решение, потому что ошибка перешла в gammer.php в операторе того же слова.....!

Mostafa Mahmoud 24.09.2021 15:01

Вместо того, чтобы передавать переменную методу compact(), вы передадите ему имя переменной в виде строки без символа доллара.

$postsCats = Post::all(); // example

return view('posts.index', compact('postsCats'));

Если вы не можете обновить свой Laravel, вы можете просто изменить запрос Query на RAW, у меня это сработало.

Есть 2 исправления для этой проблемы

  1. Понизьте свой php до 7.2
  2. запустите «обновление композитора», так как в последней версии Laravel эта проблема была решена.
  $posts = Post::latest()->get();
            return view('author.post.index', compact('posts'));

Хотя ваш фрагмент кода может дать ответ на вопрос, предоставление дополнительного контекста относительно того, почему и/или как работает ваш фрагмент кода, повышает его ценность в долгосрочной перспективе.

Sven Eberth 14.06.2021 15:23

Последняя версия PHP не позволяет использовать неопределенные переменные. Вместо удаления последней версии можно переключаться между версиями. Установите более раннюю версию, скажем, PHP7.2, как указано здесь.. Затем установите эту версию как предпочтительную, запустив sudo update-alternatives --set php /usr/bin/php7.2 на вашем терминале Ubuntu. Тогда беги composer update

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