Функция Laravel Model для получения описания связанных сущностей в виде строки - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть две сущности отношения, где Order имеет много 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 голосов
/ 28 февраля 2019

Решением может быть Accessor: использование 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;
0 голосов
/ 28 февраля 2019

Используйте это в своей модели OrderItem

public functon getDescAttribute()
{
    $value = "{$this->item_name}:{$this->price}";
    return $value;
}

Это должно быть лучшее решение, $ item-> desc, чтобы получить его

0 голосов
/ 28 февраля 2019

Я уверен, что это не лучшее решение, но вы можете попробовать:

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;
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...