2017-09-15 1 views
1

Je suis en train de mettre à jour mon site web php PDO en utilisant Laravel Framework 5.3. Je trouve laravel très facile à utiliser mais il y a peu de fonctions dont je ne connais pas la syntaxe pour obtenir des résultats. Toute aide serait très appréciée.Quelle est la méthode similaire de Laravel à PDO :: FETCH_ASSOC

I ont un contrôleur de Laravel

public function index(){ 

     $posts = Post::latest()->get(); 

     return view('/home', compact('posts')); 
    } 

que j'utilise dans la lame de la récupération de données en utilisant une boucle foreach

@foreach ($posts as $row) 

@endforeach 

qui est similaire à la méthode fetchAll() dans PDO

$row = $posts->fetchAll(); 

maintenant je veux que la logique obtienne fetch (PDO :: FETCH_ASSOC) comme résultat, de sorte que je puisse assigner

$row = $posts->fetch(PDO::FETCH_ASSOC); 

je dois le faire parce que je veux utiliser pour la boucle dans la lame pour afficher les données, si j'utilise boucle foreach alors il crée la duplication pour résultat itéré. Voici le code AOP que je dois mettre à jour avec Laravel

for($i=0; $i<$count_photos; $i++){ 

     $row_gallery = $get_photos->fetch(PDO::FETCH_ASSOC); 

     $pst_id = $row_gallery['post_id']; 
     $img = $row_gallery['img_name']; 


     echo '<div class="img_gallery"><div class="gallery'.$i.'"><a href="uploads/'. $img . '" data-lightbox="'.$pst_id.'"> <img class="img-responsive" src="uploads/'. $img . '"></a></div></div>'; 

     } 

Merci à l'avance pour l'aide

+1

Qu'est-ce que vous essayez de faire? Juste obtenir la première rangée de la table? Si oui, alors faites juste 'Post :: latest() -> first();' qui ne retourne qu'une seule ligne/objet. – aynber

+1

Comment un 'Post' se rapporte-t-il à votre requête' $ get_photos'? –

+0

@Ross, j'ai deux tables, une pour les messages et une pour les photos. La table des photos peut avoir plusieurs photos associées à un seul article. J'ai utilisé la relation hasMany() dans le modèle pour extraire des photos avec ce post. – chris

Répondre

2

Les modèles ont déjà tiré par les cheveux lorsque vous utilisez get() de sorte que vous serez en mesure d'accéder aux propriétés sur le modèle tout de suite

@foreach ($posts as $post) 

    {{ $post->title }} //assuming you have a "title" column in the database 

@endforeach 

Vous pourriez trouver cela utile: https://laracasts.com/series/laravel-from-scratch-2017/episodes/7


Modifier

Si vous avez la relation photos mis en place dans votre modèle Post alors vous pouvez eager load la relation. En outre, puisque vous voulez seulement charger un poste, vous pouvez utiliser first() au lieu de get() afin que vous finiriez avec les éléments suivants:

Controller:

public function index() 
{ 
    $posts = Post::with('photos')->latest()->first(); 

    return view('/home', compact('posts')); 
} 

fichier Lame

@foreach($post->photos as $k => $photo) 
    <div class="img_gallery"> 
     <div class="gallery{{ $k }}"> 
      <a href="{{ url('uploads/'.$photo->img_name) }}" data-lightbox="{{ $post->id }}"> 
       <img class="img-responsive" src="{{ url('uploads/'.$photo->img_name) }}"> 
      </a> 
     </div> 
    </div> 
@endforeach 

Espérons que cela aide!

+0

Merci @Ross pour répondre.Je ne peux pas utiliser la boucle foreach car j'essaie d'extraire des données à l'intérieur d'une boucle for, si j'utilise foreach alors pour chaque itération il répète les données récupérées. Je dois utiliser fetch_assoc similaire pour avoir juste une valeur pour chaque itération – chris

+1

@chris Etes-vous en train d'essayer d'obtenir un message? –

+0

qui a travaillé pour moi merci beaucoup pour votre solution. – chris