我有一个在使用laravel eloquent方法之前有效的查询
$products = Product::where('category', 'ILIKE', '%'.$conditionTxt.'%')
->orderBy('created_at', 'desc')
->get();
但是在使用查询构建器方法之后
$products = DB::table('products')
->where('category', 'ILIKE', '%'.$conditionTxt.'%')
->orderBy('created_at', 'desc')
->get();
它返回此错误:
未定义的属性:stdClass :: $ inventory
这是我的模型和视图的一部分,它指出错误。
模型
public function inventory(){
return $this->hasMany('App\InventoryRecord\InventoryRecord');
}
查看:
<td>
<?php
for($i = 0; $i < count($val->inventory); $i++){
if( $val->inventory[$i]->total_qty <= 50 ) { ?>
<span style="color:#C00"><?php echo $val->inventory[$i]->total_qty.' -'; ?></span>
<?php }else{ ?>
<span style="color:#25A602"><?php echo $val->inventory[$i]->total_qty.' -'; ?></span>
<?php
}
}
?>
</td>
答案 0 :(得分:1)
使用查询构建器方法时,它返回一个Illuminate\Support\Collection
,其中包含结果,其中每个结果都是 PHP StdClass
对象的实例(不是模型对象)。您可以通过访问列作为对象的属性来访问每个列的值。
但是你无法访问Model关系,因为你有PHP StdClass
对象。
我建议你,坚持Laravel eloquent
。
答案 1 :(得分:1)
您正在混合两种不同的功能。 Laravel提供了一个数据访问层,即查询生成器。 Laravel还提供了一个名为Eloquent的ORM,它建立在Query Builder之上。
当您使用Eloquent查询数据库时,您将获得您的Eloquent Models的实例。
当您使用查询构建器查询数据库时,您将获得stdClass
的实例。
查询构建器不会,也不应该知道有关您的Eloquent模型的任何信息。如果您需要Eloquent功能(例如访问inventory
关系),那么您需要使用Eloquent来查询数据库。