如何在Laravel Eloquent或Fluent中进行查询?
DUELS
|id|userId1 | UserId2
-------------------------
|1| 1 | 4 |
|2| 3 | 2 |
|3| 2 | 1 |
-------------------------
USERS
|id| firstName |
----------------
|1| Bob |
|2| Hans |
|3| Jerome |
|3| Katy |
----------------
查询:获取具有$ userId的用户参与的决斗中的用户名称:
SELECT u1.firstName AS user1FirstName, u2.firstName AS user2FirstName
FROM duels
LEFT JOIN users AS u1
ON userId1 = u1.id
LEFT JOIN users AS u2
ON userId2 = u2.id
WHERE userId1 = $userId || userId2 = $userId
答案 0 :(得分:0)
使用 Laravel的Fluent ,要执行该查询,您需要执行以下操作:
DB::table('users')->join('duels', function($join) use ($userId){
$join->on('users.id', '=', 'duels.userId1')
->orOn('users.id', '=', 'duels.userId2')
->where('users.id', '=', $userId);
})->get();
使用 Laravel's Eloquent ,您可以将用户视为 第一个播放器 ,或者< strong> 第二位玩家 。
在User
模型中,定义上述两种关系:
class User extends Eloquent{
/**
* ...
*/
public function duelsAsFirstPlayer(){
return $this->belongsToMany( 'App\User', 'duels', 'user_id_1', 'user_id_2');
}
public function duelsAsSecondPlayer(){
return $this->belongsToMany( 'App\User', 'duels', 'user_id_2', 'user_id_1');
}
}
现在,为了让所有用户$userId
的用户与决斗,请查询User
模型:
作为第一个玩家:
$users = App\User::find($userId)->duelsAsFirstPlayer()->get();
或第二位玩家:
$users = App\User::find($userId)->duelsAsSecondPlayer()->get();