我正在使用Laravel Framework 5.3更新我的php PDO网站。我发现Laravel非常容易使用,但很少有功能我不知道实现结果的语法。
我有一个Laravel控制器
public function index(){
$posts = Post::latest()->get();
return view('/home', compact('posts'));
}
我在刀片中使用foreach循环来获取数据
@foreach ($posts as $row)
@endforeach
类似于PDO中的fetchAll()方法
$row = $posts->fetchAll();
现在我希望逻辑获取结果(PDO :: FETCH_ASSOC),这样我就可以分配
$row = $posts->fetch(PDO::FETCH_ASSOC);
我必须这样做,因为我想在刀片中使用for循环来显示数据,如果我使用foreach循环,那么它会为迭代结果创建重复。以下是我必须使用Laravel
更新的PDO代码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>';
}
答案 0 :(得分:2)
当您使用get()
时,模型已经被提取,因此您可以立即访问模型上的属性,例如
@foreach ($posts as $post)
{{ $post->title }} //assuming you have a "title" column in the database
@endforeach
您可能会发现这有用:https://laracasts.com/series/laravel-from-scratch-2017/episodes/7
如果您在photos
模型中设置了Post
关系,那么您可以eager load建立关系。此外,由于您只想加载一个帖子,因此您可以使用first()
代替get()
,这样您最终会得到以下信息:
<强>控制器强>:
public function index()
{
$posts = Post::with('photos')->latest()->first();
return view('/home', compact('posts'));
}
刀片文件
@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