我有两个实体关系,其中Order hasMany OrderItems。我正在尝试在我的desc函数中获取订单商品详细信息作为描述字符串,如下所示。
class Order extends Model
{
public function items(){
return $this->hasMany(OrderItem::class);
}
public function desc() : string
{
$items = $this->items->select("item_name, price")->get();
$desc='';
foreach($items as $item){
$desc .=implode(':',$item).', ';
}
return $desc;
//return 'item_name:price, cards:50,'
}
}
它扔
“ implode():传递了无效的参数”
您能帮我吗,我该如何实现?有更好的方法吗?
答案 0 :(得分:2)
在您的OrderItem模型中使用它
public functon getDescAttribute()
{
$value = "{$this->item_name}:{$this->price}";
return $value;
}
这一定是最好的解决方案,$ item-> desc可以检索它
答案 1 :(得分:1)
我确定这不是最佳解决方案,但是您可以尝试:
public function desc() : string
{
$items = $this->items
->select("item_name, price")
->pluck("item_name, price")
->all(); // here you get array with key-value pairs
$desc = '';
foreach ($items as $k => $v) {
$desc .= 'item_name: ' . $k . ', price: ' . $v . ',';
}
return $desc;
}
答案 2 :(得分:1)
解决方案可能是访问器:在模型中使用get ... Attribute():
public function getOrderItemDetailsAttribute() {
$details= new Collection();
foreach ($this->items as $item) {
$details= $details->add('name: '.$item->item_name.' ; price: '.$item->price);
}
return $details;
}
通过以下方式致电
:order->orderItemDetails;