Alooors, c'est un peu spécial la façon de faire, normalement sur Laravel on utlise Eloquent/save() et des Relations, mais vu le code tout le système que propose Laravel n'est pas en place donc bon on va laisser comme ça pour l'instant x)
Si tu veux utiliser la façon "Laravel" de faire, il faut que tu ajoutes un champ cart_id dans la table products:
databases/migrations/12345689_create_products_table.php
$this->foreignId('cart_id')
->constrained()
->onUpdate('cascade')
->onDelete('cascade');
Et que tu fasses les relations à partir du model:
Cart:
public function products(): HasMany
{
return $this->hasMany(Product::class);
}
Product:
public function cart(): BelongsTo
{
return $this->belongsTo(Cart::class);
}
A partir de la tu pourras virer Cart::add()utiliser du Eloquent :p
Fin de la parenthèse
Pour la vue, alors ce serait comme ça:
@php
$product = $item->associatedModel->parent ?? $item->associatedModel; // $item->associatedModel->parent si ça existe, sinon $item->associatedModel
$image = $product->images->exists() ? asset('storage/'.$product->images->first()->full) : 'https://via.placeholder.com/176'
@endphp
Maintenant en vrai ce code ne devrait pas se trouver dans la vue, il devrait etre dans le ->with([]) du controller:
return view('')->with([
"product" => $item->associatedModel->parent ?? $item->associatedModel, // $item->associatedModel->parent si ça existe, sinon $item->associatedModel
"image" => $product->images->exists() ? asset('storage/'.$product->images->first()->full) : 'https://via.placeholder.com/176'
]);
// ou
return redirect()->back()->with([...]);
En gros il y a un principe dans Laravel et PHP: Il faut seulement dire à la vue d'afficher les données, faut rien demander à la vue, on demande tout au controller, et le controller donne à la vue les données à afficher, la vue affiche sans réfléchir ^^