Laravel模型函数以字符串形式获取相关实体描述

时间:2019-02-28 12:02:56

标签: php laravel eloquent

我有两个实体关系,其中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():传递了无效的参数”

您能帮我吗,我该如何实现?有更好的方法吗?

3 个答案:

答案 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;