Laravel 8 красноречивый запрос — поместите внешнюю переменную в «Выбрать после объединения»

#php #laravel #eloquent

#php #laravel #красноречивый

Вопрос:

Ниже приведен код, в котором я получаю соответствующие записи, объединяя 3 таблицы, а затем оператор ‘Select’ в конце извлекает определенные поля. Он работает отлично. Теперь я хочу добавить переменную ‘$userName’ в оператор ‘Select’, чтобы передавать ее с каждой записью для просмотра. также я хочу, чтобы ключ $userName был именем пользователя, а значение было динамическим.

вот код.

     $fromDate = request('fromDate');
    $toDate = request('toDate');
    $user = auth()->user();
    $userName = $user->name;
    
    $records = $user->cases()
        ->join('myrequests', 'mycases.id', 'myrequests.mycase_id')
        ->whereDate('myrequests.created_at', '>=', $fromDate)
        ->whereDate('myrequests.created_at', '<=', $toDate)
        ->select(
            'mycases.*',
            'myrequests.number',
            'myrequests.created_at',
            'myrequests.requested',
             **here I want the '$userName'**
        )->get();
 

Я пробовал 'username' => $userName и {{$userName}}

но это не работает.

Ответ №1:

вы должны получить все элементы из базы данных, а затем выполнить итерацию по ним:

  $records= ....

foreach ($records as $key => $item) {
   $item->username= $userName;
}
 

Ответ №2:

Я предполагаю, что вы хотите, чтобы строка $userName возвращалась как столбец ‘username’. Если это так, добавьте selectRaw .

 $records = $user->cases()
        ->join('myrequests', 'mycases.id', 'myrequests.mycase_id')
        ->whereDate('myrequests.created_at', '>=', $fromDate)
        ->whereDate('myrequests.created_at', '<=', $toDate)
        ->select(
            'mycases.*',
            'myrequests.number',
            'myrequests.created_at',
            'myrequests.requested',
        )
        ->selectRaw('"?" as username', [$userName])
        ->get();
 

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

1. он возвращает ошибку «SQLSTATE [HY000]: Общая ошибка: индекс 25 столбцов вне диапазона»