Laravel离开加入AS

时间:2015-08-09 10:14:28

标签: php sql laravel eloquent

如何在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

1 个答案:

答案 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();