Почему я получаю неопределенную переменную: запрос в laravel

#laravel

Вопрос:

Я получил ошибку с моим запросом, похоже, что моя Request $request переменная не может использоваться внутри приведенного function($quer){$query->} ниже примера моего кода.

 Table1::addSelect(['PaymentStatus' => Table2::selectRaw('COUNT(*)')
        ->whereColumn('AccountNumber','Table1.AccountNumber')
        ->whereColumn('ServicePeriodEnd','Table1.ServicePeriodEnd')
        ])->whereNotExists(function($query){
            $query->select(DB::raw('*'))
            ->from('Table2')
            ->whereRaw('Table1.AccountNumber = Table2.AccountNumber')
            ->whereRaw('Table1.ServicePeriodEnd = Table2.ServicePeriodEnd')
            ->where('AccountNumber', $request->AccountNum); // this part gives an Undefined Variable: request
        })->where('AccountNumber', $request->AccountNum)
        ->orderBy('ServicePeriodEnd','desc')
        ->get();
 

Ответ №1:

Переменная $request не может быть прочитана из функции из-за того, что она не была объявлена для использования в функции. Замените эту строку:

    ])->whereNotExists(function($query){
 

С этой строкой

     ])->whereNotExists(function($query) use ($request) {
 

Кстати, это относительно новый синтаксис. Пример можно найти по адресу https://www.php.net/manual/en/functions.anonymous.php

Комментарии:

1. ах да , я забыл добавить use ($request) , Спасибо за это!

Ответ №2:

Используйте запрос use ($request) в запросе функции обратного вызова

->whereNotExists(function($query) use ($request) {

 Table1::addSelect(['PaymentStatus' => Table2::selectRaw('COUNT(*)')
        ->whereColumn('AccountNumber','Table1.AccountNumber')
        ->whereColumn('ServicePeriodEnd','Table1.ServicePeriodEnd')
        ])->whereNotExists(function($query) use ($request) {
            $query->select(DB::raw('*'))
            ->from('Table2')
            ->whereRaw('Table1.AccountNumber = Table2.AccountNumber')
            ->whereRaw('Table1.ServicePeriodEnd = Table2.ServicePeriodEnd')
            ->where('AccountNumber', $request->AccountNum); // this part gives an Undefined Variable: request
        })->where('AccountNumber', $request->AccountNum)
        ->orderBy('ServicePeriodEnd','desc')
        ->get();
 

Комментарии:

1. Я действительно забыл добавить use request . кстати, спасибо!