1
votes

Comment afficher sur la lame afficher le contenu d'un identifiant sélectionné? Laravel

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.


2 commentaires

PackageItems est une collection donc vous ne pouvez pas accéder directement à $ p-> packageItem comme ça. vérifier mon message


@bhavinjr merci pour l'explication. Votre code fonctionne parfaitement, je l'ai accepté comme réponse.


3 Réponses :


1
votes

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


0 commentaires

0
votes

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


0 commentaires

1
votes

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


2 commentaires

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. :)