如何在laravel中获取用户职业为特例的帖子

问题描述

这是一款社交媒体应用。

  1. users 表具有 id姓名电子邮件密码 字段。
  2. posts 表具有 iduser_idcaption 和其他字段。
  3. professions 表有 idtitle 字段
  4. users_professions 表具有 iduser_id 字段
  5. 每个用户都有很多帖子。
  6. 用户“hasMany”帖子,发布“belongsTo”用户。
  7. 每个用户都有一个users_professions
  8. 用户“hasOneusers_professions

问题:

我想获得他们的用户职业等于所选 ID 的“帖子”。

我当前的代码:

$posts = Post::join('users','users.id','=','posts.user_id')
    ->join('users_professions','users_professions.user_id')
    ->where('users_professions.profession_id',$request->category_id)
    ->where('files',"<>","[]")
    ->where('is_product',0)
    ->select('posts.id','posts.title','posts.user_id','posts.is_product','posts.media_display_mode','posts.files','posts.created_at')
    ->orderBy('posts.id','desc')
    ->paginate(50);

这个代码正确吗?

解决方法

我看不出你的代码有什么问题。如果您只关心根据与它们的关系相关联的条件检索 Posts,则可以使用 whereHas 方法。

Eloquent Relationships - Querying Relationship Existence

假设您的模型中定义了以下关系:

  • Post belongsTo User(如user()
  • User belongsToMany Profession(如professions()
// Query only the posts that belong to an user who has a profession with id = $profession_id
Post::whereHas('user.professions',function ($professions) use ($profession_id) {
    $professions->where('professions.id',$profession_id);
})
...
->get()

或者假设您的模型中定义了以下关系:

  • Post belongsTo User(如user()
  • User hasMany(或hasOneProfessionUser(如professions_user()
// Query only the posts that belong to an user who has a profession_user with profession_id = $profession_id
Post::whereHas('user.professions_user',function ($professions_user) use ($profession_id) {
    $professions_user->where('profession_user.professions_id',$profession_id);
})
...
->get()

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...