0

我有 2 张桌子:

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)的数组。

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

4

1 回答 1

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

于 2014-09-24T12:55:33.690 回答