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

How to get posts whose user profession is a special case in laravel

这是一款社交媒体应用。

  1. users table 有 id, name, 电子邮件密码 字段。
  2. posts table 有 id, user_id, 标题和其他字段。
  3. 专业 table 有 id , title 字段
  4. users_professions table 有 id , user_id 字段
  5. 每个用户都有很多帖子。
  6. 用户“hasMany”个帖子,Post“belongsTo”一个用户。
  7. 每个用户有一个users_professions.
  8. 用户“hasOneusers_professions.

问题:

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

我当前的代码:

$posts = Post::join('users', 'users.id', '=', 'posts.user_id')
    ->join('users_professions', 'users.id', '=', '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

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

  • PostbelongsToUser(如user()
  • UserbelongsToManyProfession(如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()

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

  • PostbelongsToUser(如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()