当前位置: 首页 > 知识库问答 >
问题:

在Laravel中使用渴望加载的查询生成器

梁丘璞瑜
2023-03-14

有一个典型的我与邮政

职位模型

 public function comments(){
    return $this->hasMany('App\Comment');
}

迁移后:

Schema::create('posts', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');         
    });

评论模型:

 public function Post(){
    return $this->belongsTo('App/Post', 'id');
}

评论迁移:

   Schema::create('comments', function (Blueprint $table) {
        $table->increments('id');
        $table->date('date_comment');
        $table->unsignedInteger('post_id')->nullable()->default(null);
        $table->foreign('post_id')->references('id')->on('posts');
        });

我想在拉威尔使用渴望加载。

例如我怎样才能使用“急切加载”获得他最近评论的所有帖子?

我试过这个:

$post = Post::with('comments:post_id, date_comment')->get();

但像这样,我得到了所有的评论。需要帮忙吗?

最好的问候

编辑:

Foreach语句(Blade):

   @foreach($posts as $post)            
            <td>{{ $post->name }}</a></td>
            <td>
            {{ !empty($post->comments[0]) ? $post->comments[0]-> 
                date_comment : '' }}
            </td>                                      
   @endforeach

共有2个答案

丁英韶
2023-03-14

您可以约束即时加载

$posts = Post::with(['comments' => function($qry) {
    $qry->select('id','date_comment')->orderBy('date_comment', 'desc')->first();
}])->get();

使用这个,你可以访问所有的帖子与他们的最新评论。

如果在查询中使用select方法,不要忘记在列表中添加id字段。

要访问注释的日期,请执行以下操作:

foreach($posts as $post) {
    var_dump(!empty($post->comments[0]) ? $post->comments[0]->date_comment : '');
}
汪泓
2023-03-14

您需要再建立一个关系来检索最新的注释。

邮递php

public function comments(){
    return $this->hasMany('App\Comment');
}

public function latestComment(){
    return $this->hasOne('App\Comment')->orderBy('date_comment', 'desc');
}

现在你可以这样取回它。

$posts = Post::with('latestComment')->get();

注:未测试

 类似资料:
  • 在我的控制器我有以下代码: 在这两种方法中,只读取查询的第一个条件。 我想让1子句和1在急切加载的数据中被过滤。 有什么我错过了做的吗?我把它编错了吗?

  • 我有一个问题,就是基于hasMany关系从数据库中获取数据并将其发送到Larave中的api。在下面的代码中,Laravel没有给我客户id=$id的产品。我不知道为什么,我不能在$query旁边发送$id。如果我把号码写在“我有很好的安全套,但我需要自动拿。 所有api代码 先谢谢你。

  • 我有以下三个表格: 帖子 帖子: 评论: 标签: Post表有许多注释,comments表有许多与之关联的标记。 如何使用“快速加载”将所有这些表组合在一起? 比如: 但是这个查询总是在标记关系中返回空响应。 我做错了什么? 期望的结果是这样的: 你可以看到帖子里面包含评论,评论里面也包含标签关系。 另外,我在我的项目中使用了“jenssegers/laravel mongodb”包,我试图在没有

  • 我试图从一个表中选择所有结果,并在用户ID匹配时与另一个表合并。 我有三个表:runs、users和一个run\u用户透视表。我想从数据透视表中的“运行”和其他列(即“已完成”、“粘性”、“上次测试”和“难度”)中选择所有结果,但只从当前用户的“运行用户”中提取数据。 在原始SQL中,我通过一个带有AND语句的左连接成功地做到了这一点: 如何通过查询生成器执行此操作,有何建议?我可以在Larave

  • 拉威尔说: 我需要的是这样的东西 我们可以在一个关系中加载多个关系。 这有可能吗?

  • 这是通过mysql成功执行的查询: 这是一个查询laravel,我使用查询生成器: 我得到了这个错误: "SQLSTATE[42000]:语法错误或访问冲突:1055'lookbubbledrink.v.id'不在GROUP BY(SQL:选择Count()作为总数,.,.代码>作为左加入作为上的。##################################################