在使用select和with时流明/ Laravel获取属性

时间:2018-09-27 10:53:17

标签: php laravel lumen

我已经几次遇到这个问题了,我似乎找不到解决办法-我觉得我似乎缺少明显的东西。

我正在用Lumen制作JSON API,为特定用例建立特定的路由。为了加快加载时间,我只想输出将要使用的字段。

我的模型具有字段,关系和属性的组合。 在限制输出时,我正在努力指定属性

例如:

一个tasktime_records。每个time_record的{​​{1}}中有value个。{p>

我想输出任务名称,时间记录值以及我在time上设置的属性totalTime,如下所示(这不是完整的代码,但希望能遍历这个想法)

task

如果我然后执行以下操作:

class Task extends Model {

    protected $appends = [
        'totalTime'
    ];

    public function timeRecords() {
        return $this->hasMany('TimeRecord');
    }

    public function getTotalTimeAttribute() {
        $total = $this->timeRecords()->map(function($time_record){
            return $time_record->value;
        });

        return array_sum($total);
    }
}

然后输出,我得到了所有带有Task::get(); 属性的任务。但是,如上所述,我只想输出一些属性:

totalTime

无论我做什么,似乎都无法获得属性输出。该值在数组中,但为空。

2 个答案:

答案 0 :(得分:1)

要解决此问题,必须选择属性访问的字段。

因为我只是返回了Task::select('id', 'name') ->with([ 'timeRecord' => function($query){ $query->select('id'); } ]) 的ID,所以该属性无法计算time_record,因为total_time字段不是

(只有在写出此问题时,我才找到答案...)

答案 1 :(得分:1)

您可以使用with()方法获得该信息而无需回调。回调方法可为您过滤结果。

Task::select('id', 'name')
    ->with("timeRecords:id") // use comma for multiple columns
    ->get();