J'essaie de parcourir un tableau pour une requête écrite dans la lame, comme suit:
syntax error, unexpected '<'
Je reçois l'erreur suivante:
@foreach({{\App\Post::where('qid',$updt_18_q->qid)->get()->body}} as $updt_18_a)
La requête fonctionne correctement en utilisant first () en dehors de la boucle @foreach.
3 Réponses :
Ce que vous faites est une si mauvaise pratique, écrivez toute votre logique dans Controller
@php $data = \App\Post::where('qid',$updt_18_q->qid)->get() @endphp
@foreach($data as $updt_18_a)
//code
@endforeach
La syntaxe ci-dessus sert à faire écho à quelque chose afin de ne pas boucler un tableau mais en écho, faites-le comme ceci
Dans Laraval, si vous faites écho à un tableau ou à un objet, il le convertit automatiquement en objet json afin que vous n'obteniez pas d'erreur de conversion de tableau en chaîne
{{}}
Si je le fais dans le contrôleur, j'enverrai autant de variables du contrôleur. Quel est le principal inconvénient de mettre une requête en lame?
lorsque votre application s'agrandit, la mettre à jour ou la personnaliser rend la tâche si difficile car vous ne savez jamais où vous avez écrit la logique, mais si vous suivez MVC, vous savez déjà où la logique est écrite, c'est l'inconvénient le plus simple, mais vous pouvez aller plus loin découvrir.
La méthode
get () de Laravel renvoie un tableau d'objets et la méthode first () renvoie un seul objet. C'est pourquoi votre requête fonctionne avec first () .
Vous devez donc faire ceci:
// This is your array of objects.
@php($posts = \App\Post::where('qid',$updt_18_q->qid)->get())
// Iterate through array
// $updt_18_a is your Post object
/* $updt_18_a \App\Post */
@foreach($posts as $updt_18_a)
$body = $updt_18_a->body; // Access like this.
// Code here
@endforeach
@foreach(\App\Post::where('qid',$updt_18_q->qid)->get()->body ?? [] as $updt_18_a)
//code
@endforeach