【问题标题】:How to use outer full join in laravel 5.0?如何在 laravel 5.0 中使用外部完全连接?
【发布时间】:2017-05-30 10:39:36
【问题描述】:

这是我的控制器:

public function lihatpesanansemua() //ajax
{
    if(Request::ajax())
    {
        $hasil = DB::table('pesanan')->join('pemesan','pemesan.id', '=', 'pesanan.idpemesan')->join('komputer', 'komputer.id' ,'=', 'pesanan.idkomputer')
        ->select('pesanan.id', 'pemesan.nama', 'pesanan.tglpesan', 'pesanan.jampesan', 'pesanan.jamakhir', 'komputer.nama_komputer', 'komputer.lantai', 'komputer.Kelas')
        ->orderby('pesanan.id', 'asc')
        ->get();
        $hasil = json_encode($hasil);
        return $hasil;
    }
}

这就是内连接。如何更改为完全外部联接?谢谢,对不起我的英语不好

【问题讨论】:

  • 您要更改哪个加入?您目前的查询中似乎有 两个 内连接。
  • 这将是很多代码。您确定需要对 both 查询进行完全外连接吗?也许您可以与我们分享一些数据以及您想要得到什么结果?

标签: mysql laravel laravel-5 outer-join


【解决方案1】:

我不知道您的查询到底想达到什么目的,以及您需要完全外连接的地方,但我会先说 MySQL 没有对完全外连接的内置支持。基于this SO question,我们可以找到一种替代方式来编写以下查询:

SELECT * FROM t1
FULL OUTER JOIN t2
    ON t1.id = t2.id

这可以重写为左连接和右连接的UNION

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id

在 Laravel 中,我们可以编写如下代码来表示上面的全外连接:

$second = DB::table('t2')
             ->rightJoin('t1', 't1.id', '=', 't2.id')

$first = DB::table('t1')
            ->leftJoin('t2', 't1.id', '=', 't2.id')
            ->unionAll($first)
            ->get();

同样,我不知道您为什么认为您需要两个外连接,但无论如何您应该能够调整上述代码和查询并将其用于您的情况。

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2011-12-31
    相关资源
    最近更新 更多