Laravel 返回自定义格式的雄辩关系

Laravel 返回自定义格式的雄辩关系,laravel,eloquent,relation,custom-formatting,Laravel,Eloquent,Relation,Custom Formatting,我有两张桌子: Services id | name | ... Prices id | service_id | day | time | price 一项服务可以有多种价格(以周为单位,以时间为单位) 当我尝试获取对象并将其转换为数组时,它现在的外观如下: $service = Service::with('prices')->find(1); array 'id' => string '1' 'name' => string 'Test' 'pric

我有两张桌子:

Services 
id | name | ...

Prices 
id | service_id | day | time | price
一项服务可以有多种价格(以周为单位,以时间为单位)

当我尝试获取对象并将其转换为数组时,它现在的外观如下:

$service = Service::with('prices')->find(1);

array
  'id' => string '1'
  'name' => string 'Test'
  'prices' => 
    array
      0 => 
        array (size=7)
          'id' => string '1'
          'service_id' => string '1'
          'day' => string '1'
          'time' => string '0'
          'price' => string '50.00'
      1 => 
        array (size=7)
          'id' => string '2'
          'service_id' => string '1'
          'day' => string '1'
          'time' => string '1'
          'price' => string '50.00'
      ...
我希望此服务对象的外观如下所示:

array
  'id' => string '1'
  'name' => string 'Test'
  'prices' => 
    array
      1 => array
          '0' => '100.00'
          '1' => '100.00'
          ...
          '23' => '450.00'
      2 => array
          '0' => '100.00'
          '1' => '100.00'
          ...
          '23' => '450.00'
换句话说,我希望我的关系返回第一个包含天(1-7)的数组,并且每一天都是包含当天时间(0-23)的数组


这样做的最佳实践是什么?

我会有一个单独的助手类来修改数据。假设您的价格模型称为价格:

class ModelFormatter {

private $pc;

public function __construct(Collection $pricesCollection){
    $this->pc = $pricesCollection;
}

public function toArray(){
    $result = [];

    foreach($this->pc as $item){
         //do checks and build up the $result array
    }

    return $result;
}

}
然后

$service = Service::with('prices')->find(1);
$prices = $service->prices;

(新的ModelFormatter($prices))->toArray()

将该任务用于数据库不是更好吗?使用查询范围之类的内容。。使用这种方法,我的控制器将更干净,所有的工作都将在db上进行。查询范围用于指定……嗯,查询的范围。你要做的是用另一种方式建立关系。因此,另一种选择是创建一个单独的关系“pricesToArray”,并以某种方式修改该关系,使其以这种格式返回数据。这里可以看到一个修改关系的示例:是否有方法将此新格式存储回原始对象$service。类似于$service->prices=(新的ModelFormatter($service->prices))->toArray()的东西;当我试图将该对象传递给javascript或var_dump时,我看到on prices属性是数据库中的原始关系