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

时间:2014-09-24 12:19:24

标签: 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'
  '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)。

这样做的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

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

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;

(new ModelFormatter($prices))->toArray();