2016-12-24 135 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來查詢數據庫。

相關問題