zoukankan      html  css  js  c++  java
  • laravel查询构造器中别名的问题

    Laravel框架对数据库的封装是比较完善的,用起来也比较方便。但之前有一个问题一直困扰着我,就是利用laravel作查询时。如果想给表名或是字段名起别名是比较麻烦的事。但翻阅它的文档不难发现,它提供了一个DB::raw()的方法给我们,利用这个方法,我们就可以轻松的实现对表的重命名。

    问题还原:

    一般的写法:DB::table('users')->select('id','username')->get();

    这样写是一点问题没有的。

    加别名的写法:DB::table('users as table1')->select('id')->get();

    这样写也不会产生错误

    我们尝试另一咱写法:DB::table('users as table1')->select('table1.id')->get();

    这样写就报错了,但这种写法我们又是不能避免的,如我们要表users表进行自连接时,就必须要用到别名加点的方式去得到字段。这样问题就来了。

    不着急,我们先看看这句话输出的SQL语句是什么样的。我们用laravel提供的一个方法toSql()去得到SQL语句

    DB::table('usersas table1')->select('table1.id')->toSql();

    结果为:select`ykttb_table1`.`id` from `ykttb_users` as `table1`

    我们发现写table1.id时,laravel框架自动给我们加上了表前缀,很显然,这样的SQL语句得不到我们要的结果。

    最后的尝试:DB::table('users astable1')->select(DB::raw('table1.id'))->get();

    这样写就没错了,用上面的方法来输出SQL语句:select table1.id from `ykttb_users` as `table1`

    这就是我们想要执行的SQL语句。

    总结:在laravel中,给表起别名,直接写就可以;但在select语句中要用到表的别名来得到字段,我们就要在外面套一层DB::raw(),

    $res = DB::table('topics')->select('topics.*', 'b.username',
                'b.avatar', 'c.username as rname', 'd.cname')
                ->where('topics.is_hidden', 0)
                ->leftJoin('users b', 'b.uid', '=', 'topics.uid')
                ->leftJoin('users c', 'c.uid', '=', 'topics.ruid')
                ->leftJoin('nodes d', 'd.node_id', '=', 'topics.node_id')
                ->orderBy('ord', 'desc')
                ->take($limit)->get();
  • 相关阅读:
    《DSP using MATLAB》Problem 6.17
    一些老物件
    《DSP using MATLAB》Problem 6.16
    《DSP using MATLAB》Problem 6.15
    《DSP using MATLAB》Problem 6.14
    《DSP using MATLAB》Problem 6.13
    《DSP using MATLAB》Problem 6.12
    《DSP using MATLAB》Problem 6.11
    P1414 又是毕业季II
    Trie树
  • 原文地址:https://www.cnblogs.com/caicaizi/p/5941105.html
Copyright © 2011-2022 走看看