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。
答案 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();