передать данные из объединенной таблицы - PullRequest
0 голосов
/ 26 августа 2018

Я построил красноречивый запрос для внутреннего объединения двух таблиц.Я получаю данные из базы данных, отлаженные с помощью dump($ordered_books);

function fetchData()
    {
        $ordered_books = DB::table('ordered_books')
        -> join('books', 'books.id','=','ordered_books.BookID')
        -> select('books.BookName', 'ordered_books.BilledNum','ordered_books.BilledDate','ordered_books.Qunatity',
        'ordered_books.Price', 'ordered_books.BillPaid', 'ordered_books.Remarks' )
        -> get()->toArray();

        dump($ordered_books);

        return compact('ordered_books');
    }

Но когда я передаю данные для просмотра страницы, я получаю сообщение об ошибке:

Cannot use object of type stdClass as array

Как решить эту проблемуошибка?

Просмотр блока страницы

@foreach($ordered_books as $data)
 <tr>
     <td> {{$data['BookName']}} </td>
     <td> {{$data['BilledDate']}} </td>
     <td> {{$data['BilledNum']}} </td>
     <td> {{$data['Qunatity']}} </td>
     <td> {{$data['Price']}} </td>
     @if($data['BillPaid'] === 1)
                <td>PAID</td> 
            @else
                <td style="color:red">DUE</td>
            @endif
     <td> {{$data['Remarks']}} </td>
 </tr>
@endforeach

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

Я проверил, что происходит, когда мы использовали toArray() метод. И вы можете видеть, что ниже коллекция превращается в массив, но элементы не ... они все еще объект ..

array:6 [▼
  0 => {#254 ▶}
  1 => {#255 ▶}
  2 => {#256 ▶}
  3 => {#257 ▶}
  4 => {#258 ▶}
  5 => {#259 ▶}
]

Как упоминал Петр Матиско, вы должны сказать

$data->BookName
0 голосов
/ 26 августа 2018

Используйте объектную нотацию для извлечения значений, как показано ниже

 @foreach($ordered_books as $data)
  <tr>
   <td> {{$data->BookName}} </td>
   <td> {{$data->BilledDate}} </td>
   <td> {{$data->BilledNum}} </td>
   ...
 </tr>
@endforeach
0 голосов
/ 26 августа 2018

Переменная $data не является массивом. Это класс. Попробуйте это:

$data->BookName

Переменная из функции get () имеет тип Коллекция классов stdClass. Вы запускаете toArray () в Коллекции. Это означает, что у вас есть массив StdClasses. Вы все еще должны использовать $data->variable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...