【发布时间】:2021-11-27 07:59:44
【问题描述】:
我的应用中有一个玩家可以完成的模块列表,当他们完成时,他们必须停止出现在“可用模块”列表中。我有表格“玩家”、“模块”和“模块播放器”来保存关系。
所以,对于“可用模块”列表,我只想显示尚未启动的模块(也就是 module_player 表上没有记录)或已经启动但尚未完成的模块(也就是 module_player 表中的状态 1) .
假设我有:
球员表
| id | name |
|---|---|
| 1 | Player_1 |
| 2 | Player_2 |
模块表
| id | name |
|---|---|
| 1 | Module_1 |
| 2 | Module_2 |
| 3 | Module_3 |
module_player 表
| module_id | player_id | status |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
“可用列表”应仅返回模块 1(已启动但未完成)和模块 3(未启动)。
问题是我只在“可用列表”中获取模块 1,这是我的查询显然有问题:
$modules = \DB::table('modules')
->join('module_player', 'modules.id', '=', 'module_player.module_id', 'left')
->join('players', 'module_player.player_id', '=', 'players.id', 'left')
->where('module_player.status', '!=', 2)
->where('module_player.player_id, '=', 1)
->select('modules.id', 'modules.name', 'modules.image', 'modules.mandatory')->paginate(10);
谢谢
【问题讨论】:
-
你为什么不使用关系?
-
hmm 因为我不仅想获取与播放器有关系的模块,还想获取还没有关系的模块,并分页
-
所以你想要 module_player 中状态为 1 且此表中不存在的模块。像 1 和 3?
-
是的,这正是我需要的
标签: php mysql laravel eloquent left-join