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

雄辩的渴望加载充当显式连接

汪弘光
2023-03-14

我正在建立一个小博客,我想使用内置的雄辩的渴望加载,但我希望它作为一个明确的加入。

下面是我试图做的,使用连接,它可以工作,但不是我想要的方式。

$posts = Post::join('users', function($join){
    $join->on('users.id', '=', 'posts.user_id');
    $join->on('users.status', '=', DB::raw('active'));
})
->get();

我的问题是,我不能像这样在我的帖子中使用用户模型:

$帖子[0]-

通过连接,用户的数据直接设置在post模型上,因此我必须像这样使用它:

$帖子[0]-

问题是:我想使用我的用户模型,因为它里面有一些我想使用的方法。一个用于打印全名,一个用于打印其网址,等等。

我无法使用即时加载来阻止帖子在没有用户连接的情况下加载。当与帖子相关联的用户没有“活动”状态时,我仍然会收到帖子,用户为空。但我根本不想要这个职位。

这有可能吗?我的解释够清楚了吗?

谢啦

共有1个答案

林修真
2023-03-14

你把事情搞得太复杂了。雄辩拥有你所需要的一切:

// first make sure you load only posts of active users
$posts = Post::whereHas('user', function ($q) {
  $q->where('status', 'active');
})
// then eager load the users
->with('user')
->get();

顺便说一句,这就是您在加入时的做法和尝试(w/oDB::raw):

$posts = Post::join('users', function($join){
    // on() is for comparing fields
    $join->on('users.id', '=', 'posts.user_id');

    // while where is for comparing to provided values/strings
    // just like simple query where()
    $join->where('users.status', '=', 'active');
})
 类似资料:
  • 我有以下三个表格: 帖子 帖子: 评论: 标签: Post表有许多注释,comments表有许多与之关联的标记。 如何使用“快速加载”将所有这些表组合在一起? 比如: 但是这个查询总是在标记关系中返回空响应。 我做错了什么? 期望的结果是这样的: 你可以看到帖子里面包含评论,评论里面也包含标签关系。 另外,我在我的项目中使用了“jenssegers/laravel mongodb”包,我试图在没有

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

  • 你一定看过下面的功能(在facebook上),一个有一些评论的帖子,每个评论都有一个类似的计数器。 https://img4.hostingpics.net/pics/67853820170616003640LaravelNewsAccueil.png 在拉雷维尔,这将是类似的 帖子有很多评论 以下评论发布 类似于用户的评论 CommentLike belong评论 评论有很多类似的评论 所以,现

  • 我已经阅读了本教程和这篇文章,但我不明白每种加载类型的确切用途。 我解释 我有这个POCO: 我明白这一点: > 对于懒惰加载:因为加载是懒惰的,如果我调用dbset将不会加载所有导航属性。这种类型的加载在性能和响应性方面是最好的。默认情况下启用它,如果我想重新启用它,我必须设置: 对于即时加载,它不是懒惰的:当我加载dpc\u-gestion时,它加载了所有导航属性。可以使用方法加载导航属性。要

  • 问题内容: 好吧,我对此完全感到困惑。我正在尝试构建按类别组织的已发布网页菜单。 Category.rb: Page.rb Page模型还具有:is_published,因此我也尝试对其进行过滤。我不愿意发布我微不足道的查询尝试,但是除了乞求更聪明的人之外,没有其他解决方案: (自己是@current_website) 这大部分返回我需要的内容,但没有返回未发布页面的父类别。例如,如果我有以下方法

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