如何在 laravel 5.0 中使用 outer full join?

问题描述 投票:0回答:2

这是我的控制器:

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;
    }
}

这就是内部连接。如何改为全外连接?谢谢,抱歉我的英语不好

mysql laravel laravel-5 outer-join
2个回答
3
投票

我不知道你的查询到底想达到什么目的,也不知道你在哪里需要完全外部连接,但我会通过说 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();

同样,我不知道为什么你认为你需要两个外部连接,但无论如何你应该能够调整上面的代码并查询并根据你的情况使用它。

参考文献:


0
投票

此代码适用于我进行完全加入:

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

$first = DB::table('t1')
            ->leftJoin('t2', 't1.t2_id', '=', 't2.id')
            ->union($first)
            ->get();
© www.soinside.com 2019 - 2024. All rights reserved.