2016-12-24 13 views
0

私は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

それはそれぞれの結果は、PHP StdClassオブジェクトのインスタンスである結果を含むIlluminate\Support\Collectionを返します。(モデルオブジェクトではありません)。オブジェクトのプロパティとして列にアクセスすることにより、各列の値にアクセスできます。

しかし、PHP StdClassオブジェクトを持っているため、モデル関係にアクセスすることはできません。

私はあなたにLaravel eloquentをお勧めします。

1

2つの異なる機能が混在しています。 Laravelはクエリービルダーであるデータアクセス層を提供します。 Laravelには、クエリービルダーの上に構築されたEloquentというORMも用意されています。

Eloquentを使用してデータベースを照会すると、Eloquentモデルのインスタンスが返されます。

クエリビルダを使用してデータベースにクエリを実行すると、stdClassのインスタンスが返されます。

クエリービルダーはEloquentモデルについて何も知らないし、そうでないこともありません。 Eloquent機能が必要な場合(inventoryの関係にアクセスするなど)、Eloquentを使用してデータベースを照会する必要があります。

関連する問題