我有两张桌子:
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)。
这样做的最佳做法是什么?
答案 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();