问题的简短版本:
我在使用查询生成器时收到Cannot use object of type stdClass as array
,但与Eloquent一起运行正常。我如何解决这个问题?
长版问题:
当我使用方法1时出现错误。
错误:无法使用stdClass类型的对象作为数组(这给出了查看foreach起始行)
但是当我使用方法2时,有没有错误。
我想知道为什么当我使用方法2时它会返回错误。我如何纠正它?
方法01(在控制器中)
$parents = DB::table('stuparents');
$parents = $parents->orderBy('first_name');
$parents = $parents->get();
方法02(在控制器中)
$parents = StuParents::orderBy('first_name');
$parents = $parents->get();
在视图中
@foreach($parents as $student)
//Code
@endforeach
这是两种方法的var_dump。
方法01
object(Illuminate\Support\Collection)#316 (1) { ["items":protected]=> array(2) { [0]=> object(stdClass)#323 (6) { ["id"]=> int(2) ["first_name"]=> string(6) "Nayani" ["last_name"]=> string(10) "Kumarihami" ["student_id"]=> int(9) ["created_at"]=> NULL ["updated_at"]=> NULL } [1]=> object(stdClass)#318 (6) { ["id"]=> int(1) ["first_name"]=> string(5) "Nimal" ["last_name"]=> string(8) "Appuhami" ["student_id"]=> int(4) ["created_at"]=> NULL ["updated_at"]=> NULL } } }
方法2
object(Illuminate\Database\Eloquent\Collection)#329 (1) { ["items":protected]=> array(2) { [0]=> object(App\StuParents)#330 (25) { ["table":protected]=> string(10) "stuparents" ["connection":protected]=> string(5) "mysql" ["primaryKey":protected]=> string(2) "id" ["keyType":protected]=> string(3) "int" ["incrementing"]=> bool(true) ["with":protected]=> array(0) { } ["withCount":protected]=> array(0) { } ["perPage":protected]=> int(15) ["exists"]=> bool(true) ["wasRecentlyCreated"]=> bool(false) ["attributes":protected]=> array(6) { ["id"]=> int(2) ["first_name"]=> string(6) "Nayani" ["last_name"]=> string(10) "Kumarihami" ["student_id"]=> int(9) ["created_at"]=> NULL ["updated_at"]=> NULL } ["original":protected]=> array(6) { ["id"]=> int(2) ["first_name"]=> string(6) "Nayani" ["last_name"]=> string(10) "Kumarihami" ["student_id"]=> int(9) ["created_at"]=> NULL ["updated_at"]=> NULL } ["casts":protected]=> array(0) { } ["dates":protected]=> array(0) { } ["dateFormat":protected]=> NULL ["appends":protected]=> array(0) { } ["events":protected]=> array(0) { } ["observables":protected]=> array(0) { } ["relations":protected]=> array(0) { } ["touches":protected]=> array(0) { } ["timestamps"]=> bool(true) ["hidden":protected]=> array(0) { } ["visible":protected]=> array(0) { } ["fillable":protected]=> array(0) { } ["guarded":protected]=> array(1) { [0]=> string(1) "*" } } [1]=> object(App\StuParents)#331 (25) { ["table":protected]=> string(10) "stuparents" ["connection":protected]=> string(5) "mysql" ["primaryKey":protected]=> string(2) "id" ["keyType":protected]=> string(3) "int" ["incrementing"]=> bool(true) ["with":protected]=> array(0) { } ["withCount":protected]=> array(0) { } ["perPage":protected]=> int(15) ["exists"]=> bool(true) ["wasRecentlyCreated"]=> bool(false) ["attributes":protected]=> array(6) { ["id"]=> int(1) ["first_name"]=> string(5) "Nimal" ["last_name"]=> string(8) "Appuhami" ["student_id"]=> int(4) ["created_at"]=> NULL ["updated_at"]=> NULL } ["original":protected]=> array(6) { ["id"]=> int(1) ["first_name"]=> string(5) "Nimal" ["last_name"]=> string(8) "Appuhami" ["student_id"]=> int(4) ["created_at"]=> NULL ["updated_at"]=> NULL } ["casts":protected]=> array(0) { } ["dates":protected]=> array(0) { } ["dateFormat":protected]=> NULL ["appends":protected]=> array(0) { } ["events":protected]=> array(0) { } ["observables":protected]=> array(0) { } ["relations":protected]=> array(0) { } ["touches":protected]=> array(0) { } ["timestamps"]=> bool(true) ["hidden":protected]=> array(0) { } ["visible":protected]=> array(0) { } ["fillable":protected]=> array(0) { } ["guarded":protected]=> array(1) { [0]=> string(1) "*" } } } }
答案 0 :(得分:4)
我猜你在{{ $student['something'] }}
之类的代码中是实际导致错误的地方。
数据库查询构建器方法get()
返回Illuminate\Support\Collection
的实例,其中每个条目都是stdClass
而不是数组。要访问列,请使用属性而非索引。
@foreach ($parents as $student)
{{ $student->column }}
@endforeach
引用文档:
get方法返回一个Illuminate \ Support \ Collection,其中包含结果,其中每个结果都是PHP StdClass对象的一个实例。您可以通过访问列作为对象的属性来访问每个列的值。