【问题标题】:How to return an array of object properties from a returned object of Laravel Eloquent如何从 Laravel Eloquent 的返回对象返回对象属性数组
【发布时间】:2015-05-02 07:14:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: object laravel eloquent laravel-5


    【解决方案1】:

    如果你使用select(...)->get(),它总是返回对象。

    但您可以添加toArray 来提取您的标准。像这样:

    return App\models\SuccessIndicatorYearWeight::find(1)
        ->select('criteria_excel', 'criteria_very_good', 'criteria_fair', 'criteria_poor')
        ->get()
        ->toArray();
    

    它将返回一个关联数组数组(使用您的键)。

    【讨论】:

      【解决方案2】:

      如果您在返回 JSON(或数组)时始终只返回这些字段,则可以在模型中使用 protected $visible = ['fields', 'you', 'need', '...'];

      http://laravel.com/docs/5.0/eloquent#converting-to-arrays-or-json

      【讨论】:

        【解决方案3】:

        不,最新的方法很受欢迎。在 Eloquent 下有一个用于数据库的 SQL Builder。如果您不具体选择,则会产生以下查询:

        SELECT * FROM indicator_year_weight;
        

        这意味着数据库返回表中的所有字段,Eloquent 会将它们全部放入对象。添加后选择:

        SELECT criteria_excel, criteria_very_good, criteria_good, criteria_fair, criteria_poor FROM indicator_year_weight;
        

        也就是说只返回一个指定的字段,所以 Eloquent 只会放它,

        【讨论】:

          【解决方案4】:

          您可能需要 list 作为参数,它需要您要提取的列。

          在您的情况下,它将是:

          $criterias = App\models\SuccessIndicatorYearWeight::whereId(1)->list(
              'criteria_excel', 
              'criteria_very_good', 
              'criteria_fair', 
              'criteria_poor'
          );
          

          这里你可以找到文档:http://laravel.com/docs/5.0/queries#selects

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-01
            • 2016-02-18
            • 1970-01-01
            • 2021-06-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多