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});