laravel 如何实现mysql表关联以及联合

laravel mysql表关联以及联合

关联条件如果是多个时,应该尽量都放到on条件下
关联查询一般是,先关联到数据后在根据where条件查询,所以关联的条件很重要,尽可能加上,可以让源数据尽可能地少,减小内存的占用。
laravel 如何实现多条件关联?
关联查询时,如果表名特别长有时候会超出一行不太方便,这里需要使用别名
laravel 如何实现表别名?
mysql查询时,有时候需要多表联合 使用 union,laravel又是如何实现的呢?
mysql查询时,我们想知道最终生成的sql是什么?
这些问题在代码中都已经实现,备份一下留作参考

示例代码

/**
     * [testMysql description]
     * @return [type] [description]
     */
    public function testMysql()
    {
        $ids = [10,11,12,13,14,15];
        DB::connection()->enableQueryLog();
        $outer = DB::table('articles as a')
        ->select('a.id','a.title','a.creator', 'b.name as username')
        ->join('users as b',function($join) {
            $join->on('a.creator', '=', 'b.id')->where('a.id', '<', 10);
        })
        ->where('a.id', '<', 10);

        $inner = DB::table('articles as a')
        ->select('a.id','a.title','a.creator', 'b.name as username')
        ->join('users as b',function($join) {
            $join->on('a.creator', '=', 'b.id')
            ->where('a.id', '>=', 10)->where('a.id', '<', 20);
        })
        ->where('a.id', '<', 20)->where('a.id', '>=', 10)
        ->whereIn('a.id', $ids)
        ->union($outer)->get()->toArray();

        $rows = array_map('get_object_vars', $inner);

        print_r($rows);
        echo '<hr/>';

        $userArticles = [];
        foreach ($rows as $row) {
            if (!isset($userArticles[$row['creator']])) {
                $userArticles[$row['creator']] = [$row['id']=>$row['title']];
            } else {
                $userArticles[$row['creator']][$row['id']] = $row['title'];
            }
        }
        print_r($userArticles);
        echo '<hr/>';

        print_r($inner);
        echo '<hr/>';
        $sql = DB::getQueryLog();   //打印当前sql
        var_dump($sql);
        return;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值