Laravel 与 PDO::FETCH_ASSOC 类似的方法是啥?
Posted
技术标签:
【中文标题】Laravel 与 PDO::FETCH_ASSOC 类似的方法是啥?【英文标题】:What is Laravel's similar method to PDO::FETCH_ASSOC?Laravel 与 PDO::FETCH_ASSOC 类似的方法是什么? 【发布时间】:2018-02-24 20:21:07 【问题描述】:我正在使用 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();
现在我希望逻辑得到类似结果的 fetch(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>';
【问题讨论】:
你想做什么?只是从表中获取第一行?如果是这样,那么只需执行Post::latest()->first();
,它只返回一个行/对象。
Post
与您的 $get_photos
查询有何关系?
@Ross,我有两张桌子,一张用来发帖,一张用来放照片。照片表可以有多张与单个帖子相关联的照片。我在模型中使用了 hasMany() 关系来获取该帖子的照片。
酷。您只是想获得一篇或所有帖子吗?
我建议阅读 laravel.com/docs/5.3/… 特别是 Retrieving Polymorphic Relations
【参考方案1】:
当您使用 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
编辑
如果您在Post
模型中设置了photos
关系,那么您可以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
【讨论】:
感谢@Ross 的回复。我无法使用 foreach 循环,因为我试图在 for 循环中获取数据,如果我使用 foreach,那么对于每次迭代它都会重复获取的数据。我必须使用类似于每次迭代只有一个值的 fetch_assoc @chris 你只是想发一篇帖子吗?以上是关于Laravel 与 PDO::FETCH_ASSOC 类似的方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
vue.js 和 Laravel - 我们如何将 vue js 与 laravel 集成?