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