Je suis nouveau sur laravel et j'ai du mal à afficher les éléments du package que j'ai sélectionné dans ma vue en lame. Je peux afficher tous les packages dans une vue en lame. Le but est de me laisser voir le contenu d'un package si je clique dessus dans la vue en lame.
Table PackageItems
id | package_id | item_id | qty
package_id est une clé étrangère de la table packages et item_id provient du items table
Voici comment je récupère les données:
Contrôleur
@foreach($package as p)
<td>{{$p->packageItem->item_id}}</td> //error
<td>{{$p->qty}}</td> //error as well
@endforeach
Modèle de package
XXX
PackageItem Model
public function package()
{
return $this->belongsTo(Package::class,'package_id') ;
}
showItems Blade view
public function packageItems()
{
return $this->hasMany(PackageItem::class, 'package_id') ;
}
J'ai déjà essayé de dd ($ package) et j'ai obtenu les bons résultats. Mon problème est de savoir comment l'afficher sur ma vue en lame.
3 Réponses :
Dans le contrôleur
@foreach($package as $p)
<td>{{$p->packageItem->item_id}}</td> //error
<td>{{$p->qty}}</td> //error as well
@endforeach
Dans la lame
public function showPackageItems($id)
{
$package = Package::with('packageItems')
->where('id', '=', $id)
->get();
return view('admin.packages.show')->with('package', $package);
}
Modifiez votre code pour savoir comment récupérer les enregistrements
L'utilisation de find and get est différente: la différence entre rechercher et obtenir dans Eloquent
Vous devez également obtenir les éléments du package d'abord
public function showPackageItems($id)
{
$package = Package::with('packageitems')
->where('id', '=', $id)
->get();
return view('admin.packages.show')->with('package', $package);
}
Essayez ceci
Controller
{{ $package->id }} //you can access package instance like that.
//for packageItems
@foreach($package->packageItems as $p)
<td>{{ $p->item_id }}</td>
<td>{{ $p->qty }}</td>
@endforeach
Blade file
public function showPackageItems($id)
{
$package = Package::find($id)
->with('packageItems')
->where('id', $id)
->first();
return view('admin.packages.show', compact('package'));
}
Merci cela fonctionne parfaitement. Et merci pour l'explication avec la partie collections, je suis encore assez nouveau donc j'ai besoin d'apprendre pas mal de choses supplémentaires. Accepté comme réponse.
@AnthonyCruz Je suis heureux de vous aider. :)
PackageItemsest une collection donc vous ne pouvez pas accéder directement à$ p-> packageItemcomme ça. vérifier mon message@bhavinjr merci pour l'explication. Votre code fonctionne parfaitement, je l'ai accepté comme réponse.