返回Laravel DB :: table(' ...') - > get()作为Model的集合而不是StdClass

时间:2017-02-28 07:19:21

标签: php laravel eloquent laravel-5.4

DB::table('my_table')->get()会返回StdClass的集合。

是否可以返回MyTable而非StdClass的集合?有没有" laravel方式"这样做?

为了解决我的问题,我在模型Item上有了这个查询:

        return DB::table('attribute_values')
          ->join('items_categories', 'attribute_values.item_category_id', '=', 'items_categories.id')
          ->where('items_categories.item_id', '=', $this->id)
          ->select('attribute_values.*')
          ->get();

我需要模型AttributeValue的集合。目前,我正在遍历stdClass的集合并实例化AttributeValue。

2 个答案:

答案 0 :(得分:2)

您需要根据attrubute_values及其关系创建模式,例如

class ItemCatogory extends Illuminate\Database\Eloquent\Model {
      protected $table = "item_categories";

      public attributeValues() {
          return $this->hasMany(AttributeValue::class);
      }
}

class AttributeValue extends Illuminate\Database\Eloquent\Model { 
     public itemCategories() {
          return $this->belongsTo(ItemCategory::class);
     } 
}

然后您可以查询此模型:

 return AttributeValues::with("itemCategories")->get(); //eager loading of relationship

您也可以延迟加载关系:

$attrValue = AttributeValues->first(); //Relationship not loaded
$categories = $attrValue->itemCategories()->get(); 

答案 1 :(得分:0)

现在它是如此明显,但如果它对某人有帮助,我就是这样做的:

//it returns a Collection of StdClass
return DB::table('attribute_values')
  ->join('items_categories', 'attribute_values.item_category_id', '=', 'items_categories.id')
  ->where('items_categories.item_id', '=', $this->id)
  ->select('attribute_values.*')
  ->get();

如何回归Eloquent Models的集合:

//it returns a Collection of AttributeValue (my model class)
return AttributeValue::join('items_categories', 'attribute_values.item_category_id', '=', 'items_categories.id')
  ->where('items_categories.item_id', '=', $this->id)
  ->get();