laravel如何获取用户职业特例的帖子
How to get posts whose user profession is a special case in laravel
这是一款社交媒体应用。
- users table 有 id, name, 电子邮件、密码 字段。
- posts table 有 id, user_id, 标题和其他字段。
- 专业 table 有 id , title 字段
- users_professions table 有 id , user_id 字段
- 每个用户都有很多帖子。
- 用户“hasMany”个帖子,Post“belongsTo”一个用户。
- 每个用户有一个users_professions.
- 用户“hasOne”users_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
假设您的模型中定义了以下关系:
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
(或hasOne
)ProfessionUser
(如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()
这是一款社交媒体应用。
- users table 有 id, name, 电子邮件、密码 字段。
- posts table 有 id, user_id, 标题和其他字段。
- 专业 table 有 id , title 字段
- users_professions table 有 id , user_id 字段
- 每个用户都有很多帖子。
- 用户“hasMany”个帖子,Post“belongsTo”一个用户。
- 每个用户有一个users_professions.
- 用户“hasOne”users_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
假设您的模型中定义了以下关系:
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
(或hasOne
)ProfessionUser
(如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()