从联接表传递数据

时间:2018-08-26 09:57:58

标签: php laravel laravel-5

我为两个表的内部联接构建了一个雄辩的查询。我正在从数据库中获取数据,并使用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 :(得分:2)

$data变量不是数组。这是一堂课。试试这个:

$data->BookName

get()函数中的变量的类型为stdClass类的Collection。您在集合上运行toArray()。这意味着,您有一个StdClasses数组。您仍然必须使用$data->variable

答案 1 :(得分:1)

我检查了使用toArray()方法时会发生什么。。您可以在下面看到,集合变成数组,但项变成数组,但它们仍然是对象。

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

正如彼得·马蒂斯科(Peter Matisko)所述,您应该说

$data->BookName

答案 2 :(得分:0)

使用对象符号来获取如下所示的值

 @foreach($ordered_books as $data)
  <tr>
   <td> {{$data->BookName}} </td>
   <td> {{$data->BilledDate}} </td>
   <td> {{$data->BilledNum}} </td>
   ...
 </tr>
@endforeach