2016-12-24 130 views
0

我使用laravel雄辩方法使用Laravel查询生成器返回未定义的属性:stdClass的错误

$products = Product::where('category', 'ILIKE', '%'.$conditionTxt.'%') 
          ->orderBy('created_at', 'desc') 
          ->get(); 

之前但是,使用查询生成器方法

$products = DB::table('products') 
         ->where('category', 'ILIKE', '%'.$conditionTxt.'%') 
         ->orderBy('created_at', 'desc') 
         ->get(); 

它返回该错误后,一个可行的查询:

Undefined property: 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

有人可以帮我解决这个问题吗? :( – Eli

回答

1

当您使用查询生成器方法返回一个Illuminate\Support\Collection包含结果,每个结果是PHP StdClass对象的实例(不是模型对象)。您可以通过访问该列作为对象的属性来访问每个列的值。

但是您无法访问Model关系,因为您有PHP StdClass对象。

我建议你,坚持Laravel eloquent

1

您正在混合两种不同的功能。 Laravel提供了一个数据访问层,它是查询生成器。 Laravel还提供了一个名为Eloquent的ORM,它建立在查询生成器之上。

当你使用Eloquent来查询数据库时,你会得到你的Eloquent模型的实例。

当您使用查询生成器查询数据库时,您将收到stdClass的实例。

查询构建器不知道和不应该知道任何关于您的Eloquent模型。如果您需要Eloquent功能(如访问您的inventory关系),则需要使用Eloquent来查询数据库。

相关问题