mysql - Laravel 4.2 Eloquent 关系 leftjoin ON 复杂

标签 mysql laravel-4 relational-database left-join eloquent

Mysql查询

    LEFT JOIN matches as m
    ON sched.league_id = m.leagueid
    AND sched.starttime >= m.start_time
    AND (sched.team_a_id = m.radiant_team_id AND sched.team_b_id = m.dire_team_id)
    OR (sched.team_b_id = m.radiant_team_id AND sched.team_a_id = m.dire_team_id)

Laravel Eloquent

    ->leftJoin('matches as m', function($join){
        $join->on('league_id','=','m.leagueid');
        $join->on('starttime','=','m.start_time');
        // @TODO  AND (sched.team_a_id = m.radiant_team_id AND sched.team_b_id = m.dire_team_id)
        // @TODO OR (sched.team_b_id = m.radiant_team_id AND sched.team_a_id = m.dire_team_id)
    })

问题

  • 如何左加入 (某事=某事AND某事=某事)OR(某事=某事AND某事=某事)使用Laravel Eloquent

最佳答案

你的 MySQL 查询首先是错误的,我确信这就是你想要的:

LEFT JOIN matches as m
ON sched.league_id = m.leagueid
AND sched.starttime >= m.start_time
AND (
  sched.team_a_id = m.radiant_team_id AND sched.team_b_id = m.dire_team_id
  OR sched.team_b_id = m.radiant_team_id AND sched.team_a_id = m.dire_team_id
)

现在,不幸的是 Laravel 无法构建此连接。

所以唯一的方法是:

->leftJoin('matches as m', function ($j) {
   $j->on('league_id','=','m.leagueid')
     ->on('starttime','=','m.start_time')
     ->on(sched.team_a_id = m.radiant_team_id)
     ->on(sched.team_b_id = m.dire_team_id)
     ->orOn('league_id','=','m.leagueid')
     ->on('starttime','=','m.start_time')
     ->on(sched.team_b_id = m.radiant_team_id)
     ->on(sched.team_a_id = m.dire_team_id);
})

或使用原始语句(注意DB::raw内的括号):

->leftJoin('matches as m', function ($j) {
   $j->on('league_id','=','m.leagueid')
    ->on('starttime','=','m.start_time')
    ->on(
     DB::raw( '(sched.team_a_id',
     '=', 
     DB::raw('m.radiant_team_id AND sched.team_b_id = m.start_time'
  .'OR sched.team_b_id = m.radiant_team_id AND sched.team_a_id = m.start_time)')
    );
})

关于mysql - Laravel 4.2 Eloquent 关系 leftjoin ON 复杂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27200205/

相关文章:

mysql - 在 django 中用 group by 列的总和

php - Laravel 4 - 用于 Textarea 编辑的反转 Markdown

php - Laravel 4 中的事务和事件

mysql - 使用外键(FK)的最佳方式

java - 如何用java从数据库中获取所有子类别

java - 尝试通过 MySQL 正确保存/加载数组

php - MYSQL错误结果输出

php - sync or updateExistingPivot with Laravel——如何根据第三个标准进行填充

mongodb - 域对象中的关系引用 - 是否包含 Id?

mysql - SQL仅选择列上具有最大值的行