0
votes

Laravel Quelle relation à utiliser pour voir les données d'un autre modèle et colonne

J'ai deux modèles

item: p> xxx pré>

recette: p> xxx pré>

dans la migration J'ai:

@foreach($recipes as $recipe)
    <tr>
        <td>{{ $recipe->recipecode }}</td>  // this works
        <td>{{ $recipe->itemcode }}</td>    // this works
        <td>{{ $recipe->item->name }}</td>  // this doesn't work
        <td>{{ $recipe->item->uom }}</td>   // this doesn't work
        <td>{{ $recipe->item->qty }}</td>   // this doesn't work
    </tr>
@endforeach


0 commentaires

3 Réponses :


0
votes

premier, $ recette-> item-> nom ne fonctionne pas comme prévu car $ recette-> item est une collection de app \ item < / code>, pas un app \ item instance de modèle. C'est parce que vous avez défini la relation pour être " Hasmany "

Deuxièmement, veuillez en savoir plus sur Loading désireux . Ce que vous faites maintenant, c'est de multiples requêtes. C'est le n + 1, pour chaque recette que vous interrogez la base de données pour obtenir les articles. Vous n'avez pas besoin de faire cela, car ce n'est pas performant du tout. Utilisez recette :: avec ("élément ') -> sortde (" réciproque ") -> get () .

Maintenant, gardez à l'esprit que $ recette-> item n'est pas un seul élément, mais une collection d'articles appartenant à cette recette. Vous devrez probablement travailler un peu sur votre table pour afficher plusieurs articles pour une recette.


0 commentaires

0
votes

Puisque vous utilisez hasmany code>, vous devez suivre la convention de dénomination dans la fonction de dénomination xxx pré>

dans le recettes de récipients, vous pouvez accabler la charge. P>

 @foreach($recipes as $recipe)
     <tr>
         <td>{{ $recipe->recipecode }}</td>  // this works
         <td>{{ $recipe->itemcode }}</td>    // this works
         @foreach($recipe->items as $item)
             <td>{{ $item->name }}</td> 
         @endforeach
     </tr>
  @endforeach


4 commentaires

La première ligne "doit-elle" suivre ou "devrait-elle" suivre?


@Nabilfarhan Oui Doit vous suivre pour identifier facilement l'utilisation d'un nom de fonction spécifique


"Doit" signifie généralement que sans cela, le code ne fonctionnera pas. Par exemple, vous "devez" mettre fin à une déclaration avec point-virgule. Je pense que dans ce cas particulier, devrait sembler plus approprié.


Oui, également pour vous de distinguer le pluriel à une utilisation singulière également pour la lisibilité.



0
votes

Autres réponses Partager Pourquoi vous ne pouvez pas utiliser directement $ recette-> item code>. Cependant, je pense qu'il y a une plus grande erreur dans la conception de la base de données.

La base de données que vous avez conçue a une autre relation. Comme, une recette a beaucoup d'articles. Cependant, l'inverse qu'un élément n'a qu'une seule recette semble tort. Vous pouvez cuisiner de nombreuses recettes avec un article. C'EST À DIRE. Vous pouvez faire des frites de poulet et du poulet au poulet avec du poulet. P>

La conception de la base de données doit être quelque chose comme ça, P>

recipes: code, name, uom
items: code, name
item_recipe: item_code, recipe_code, qty


0 commentaires