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

如何执行Laravel嵌套查询

柳弘方
2023-03-14

我有以下三张桌子

教室

id主题

注册学生

iduser_idclass_id

帖子

id类\ id类型附件

模型

Classroom.php

public function posts()
{
   return $this->hasMany(Post::class);
}

注册学生。php

public function classroom()
{
  return $this->belongsTo(Classroom::class);
}

邮递php

public function classroom()
{
  return $this->belongsTo(Classroom::class);
}

现在我需要获得某个班级的所有帖子,学生在该班级注册。

例如,一名学生注册了教室表中id号为1的班级。所以在registered_students表中会注意到,这个特定的用户是在这个特定的类下注册的。每个类在post表中可能有多个post。用户需要获得他类的所有帖子。

我在尝试这样的事情:

 $registered_classes = RegisteredStudent::where('user_id',$user->id)
            ->where(function ($q) use ($class_id){
                Post::where('class_id',$class_id);
            })->get();

这绝对是不对的。对此的正确查询是什么。

共有2个答案

劳麒
2023-03-14

您首先需要纠正这些关系,正如TheArKa在回答中所说的那样(因为表和类名没有正确地遵循laravel雄辩的约定)。

那么正确的查询应该是:

$posts_of_class_of_user =
RegisteredStudent::where('user_id',$user->id)->classroom->posts

这将首先获得用户从注册用户从注册学生,然后它将获得课堂实例从属性到关系,然后它将获得帖子从有很多关系

严宏旷
2023-03-14

您已经创建了具有教室关系的注册学生模型。问题是,如果您的外键与Laravel行为不同,则必须将其包含在关系中。这样地:

Classroom.php

public function posts(): HasMany
{
    return $this->hasMany(Post::class, 'class_id');
}

*Laravel行为需要您使用课堂id而不是课堂id

注册学生。php

public function classroom(): BelongsTo
{
    return $this->belongsTo(Classroom::class, 'class_id');
}

public function user(): BelongsTo
{
    return $this->belongsTo(User::class);
}

邮递php

public function classroom(): BelongsTo
{
    return $this->belongsTo(Classroom::class, 'class_id');
}

更多关于Laravel行为的详细信息,这里有完整的例子

*编辑

然后,如果您想获得某个学生注册的特定班级的所有帖子,可以使用方法:

public function getAllPostsClassroom()
{
    $registeredUser = RegisteredStudent::where('user_id', $user->id)->with(['classroom.posts' => function($query) use ($class_id) {
        $query->where('class_id', $class_id);
    }])->first();
}

您将获得注册用户的教室内的所有帖子

 类似资料:
  • 问题内容: **如果要基于SellerInfoES的嵌套要约价格数组(嵌套数组)对象,我正在尝试汇总和查找价格范围。内部字段是“ offerPrice”。我如何在Elasticsearch中的嵌套数组字段上编写聚合。我尝试了以下查询,但无法正常工作。收到此错误:解析失败[在[price_ranges]中找到了两个聚合类型定义:[嵌套]和[过滤器]] 对应: 查询: 问题答案: 您必须使用。在内部使

  • 然后我添加了一个自定义存储库来执行搜索: 然后我这样搜索: 但是我没有得到任何结果,尽管事实上有匹配的结果。 我在谷歌上没有找到任何答案。有人能帮我吗?

  • 我正在构建一个搜索查询,它将一组约束()动态地添加到查询中。一般预期结构如下 换句话说,我有一组(一个或多个)必须全部满足的条件(上面的)。可能有几个这样的集合,其中任何一个都足以进行最后的匹配(上面的)。 这种结构的一个示例,由我的代码生成(这是完整的API查询,生成的部分是): 我对这个查询的理解是: 如果和 或 如果 条目将匹配 不幸的是,我把Elasticsearch称为错误 这个错误是什

  • 我有现有的学生,临时演员 如何在JPA Hibernate上加入这些表?我当前的代码是 学生实体类 附加实体类: 和地址实体类 这是我的存储库类 但是当我在学生实体中使用OneToOne时,我得到了异常“org.hibernate.LazyInitializationException:未能懒惰地初始化角色集合:com.jpa.belajarjpa.enitities.Student.extras

  • 问题内容: 因此,我有一个很小的查询可以在我的数据库上运行,并且在MySQL Workbench中可以正常工作。基本上,再次使用带有左联接的SELECT和带有左联接的UNION。 在尝试将其翻译为Laravel时没有成功。 我遇到了错误 Builder.php 1249行中的ErrorException:未定义的属性:Illuminate \ Database \ Eloquent \ Build

  • 因此,我在数据库上运行了这个小查询,它在MySQL工作台上运行良好。基本上,使用左连接进行选择,然后再次使用左连接进行并集。 年,他试图把它翻译成拉威尔,但没有成功。 我发现了错误 生成器中的错误异常。php第1249行:未定义的属性:Illumb\Database\Eloquent\Builder::$bindings 我如何在Laravel中执行一个完全原始的查询,或者如何在Laravel中以