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()-&gt;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 集成?

Laravel 版本缓存与 Laravel Mix 不工作

Laravel :: 路线与。控制器

AWS AppSync 与 Laravel 的正确集成?

如何将 Laravel 5.4 与 Angular 4 集成

Laravel系列2.2Laravel 目录结构与配置