如何从Laravel Eloquent

时间:2015-05-02 07:14:16

标签: object laravel eloquent laravel-5

我已经说过使用此查询获取对象的简单示例:

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_excelcriteria_very_goodcriteria_faircriteria_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();

但是,我想知道是否还有其他方法只返回对象的选定属性。

3 个答案:

答案 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