J'ai une relation à deux entités où Order aMany OrderItems. J'essaie d'obtenir les détails de l'article de commande sous forme de chaîne de description dans ma fonction desc comme ci-dessous.
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,' } }
Son lancement
"implode (): Arguments non valides passés"
Pouvez-vous m'aider s'il vous plaît comment puis-je y parvenir? Y a-t-il une meilleure façon de procéder?
3 Réponses :
Je suis sûr que ce n'est pas la meilleure solution, mais vous pouvez essayer:
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; }
Une solution pourrait être un Accessor: en utilisant get ... Attribute () dans votre modèle:
order->orderItemDetails;
Appelez ceci par:
public function getOrderItemDetailsAttribute() { $details= new Collection(); foreach ($this->items as $item) { $details= $details->add('name: '.$item->item_name.' ; price: '.$item->price); } return $details; }
je suis d'accord, pour ce cas, il est préférable d'utiliser l'accesseur laravel.com/docs/ 5.7 / eloquent-mutators # defining-an-accessor
@RomanBobrik En effet, c'est une solution simple, mais qui fait définitivement le travail. Merci d'avoir ajouté le lien.
Utilisez ceci dans votre modèle OrderItem
public functon getDescAttribute() { $value = "{$this->item_name}:{$this->price}"; return $value; }
Cela doit être la meilleure solution, $ item-> desc pour le récupérer
vérifier les méthodes disponibles dans les collections laravel.com/docs/5.7/collections#available-methods < / a>
@Indra toString lève une exception
$ this-> items retournent une collection. Vérifiez les méthodes disponibles dans le manuel et trouvez celle dont vous avez besoin
ou this-> items-> each (function ($ index, $ value) {// renvoie votre logique});