我已经说过使用此查询获取对象的简单示例:
return App\models\SuccessIndicatorYearWeight::find(1);
返回:
{
success_indicator_year_weight_id: "108",
success_indicator_id_fk: "174",
year_id_fk: "1",
criteria_excel: "05-05-2015",
criteria_very_good: "08-05-2015",
criteria_good: "11-05-2015",
criteria_fair: "15-05-2015",
criteria_poor: "20-05-2015",
created_by: "4",
create_date: "2015-05-01 21:40:35",
updated_by: "4",
update_date: "2015-05-02 06:49:30",
}
现在我想只从对象criteria_excel
,criteria_very_good
,criteria_fair
,criteria_poor
返回这些属性。
我尝试过这些:
return App\models\SuccessIndicatorYearWeight::find(1)->pluck('criteria_excel', 'criteria_very_good', 'criteria_fair', 'criteria_poor');
和
return App\models\SuccessIndicatorYearWeight::find(1)->select('criteria_excel', 'criteria_very_good', 'criteria_fair', 'criteria_poor')->get();
并没有成功。
一个简单的解决方法是:
return App\models\SuccessIndicatorYearWeight::whereId(1)->select('criteria_excel', 'criteria_very_good', 'criteria_good', 'criteria_fair', 'criteria_poor')->get();
但是,我想知道是否还有其他方法只返回对象的选定属性。
答案 0 :(得分:1)
如果使用select(...)->get()
,则始终返回Object。
但您可以添加toArray
来提取您的条件。像这样:
return App\models\SuccessIndicatorYearWeight::find(1)
->select('criteria_excel', 'criteria_very_good', 'criteria_fair', 'criteria_poor')
->get()
->toArray();
它将返回一个关联数组数组(带有你的键)。
答案 1 :(得分:0)
不,最新的方法是预先确定的。在Eloquent下有一个SQL Builder到数据库。如果您没有特定选择,那将产生以下查询:
def rand():
displayList = []
item = random.choice(movies_list)
print(item) #now you print what movie you picked
displayList.append(item)
print(displayList)
这意味着DB要从表中返回所有字段,而Eloquent会将它们全部放到对象中。添加select后选择:
SELECT * FROM indicator_year_weight;
这意味着只返回指定的字段,因此Eloquent只会添加它,
答案 2 :(得分:0)
如果在返回JSON(或数组)时始终只返回这些字段,则可以在模型中使用protected $visible = ['fields', 'you', 'need', '...'];
。
http://laravel.com/docs/5.0/eloquent#converting-to-arrays-or-json