sql - 如何在laravel中获取用户职业为特例的帖子
问题描述
这是一个社交媒体应用程序。
- users表有id、name、email、password字段。
- posts表有id、user_id、caption和其他字段。
- 职业表有id , title字段
- users_professions表有id,user_id 字段
- 每个用户都有很多帖子。
- 用户“ hasMany ”发布,发布“ 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
方法。
假设您的模型中定义了以下关系:
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()
推荐阅读
- reactjs - 反应如何在传递的函数中使用状态
- javascript - 无法在 wheelnav.createWhee 处读取未定义的属性“长度”
- c++ - 无法检查 lldb 中的 std::string 变量
- ios - 如何获得一些闭包的总和
- javascript - 您如何在 JavaScript 中为 Web 浏览器语音更改单词的语调或语调?
- python - AttributeError: 'list' 对象没有属性 'dijkstra'+python
- netsuite - 在用户事件中使用 nlapiLoadRecord 在加载前阶段返回记录
- javascript - 有没有办法将回调函数转换为 TypeScript/JavaScript 中的生成器?
- php - 未找到尝试插入数据的列
- android - [Dagger/MissingBinding].Kotlinjvm.functions.Function1无法提供