如何在Laravel雄辩查询(或使用查询生成器)中对表进行别名?
假设我们正在使用Laravel的查询构build器:
$users = DB::table('really_long_table_name') ->select('really_long_table_name.id') ->get();
我正在寻找一个相当于这个SQL:
really_long_table_name AS short_name
当我必须键入大量的select和wherts时(或者通常我在select的列别名中包含别名,并且它在结果数组中使用),这将特别有用。 没有任何表别名,有更多的打字对我来说,一切都变得不太可读。 在laravel文档找不到答案,有什么想法?
Laravel支持带有AS
表和列的别名。 尝试
$users = DB::table('really_long_table_name AS t') ->select('t.id AS uid') ->get();
让我们看看它在一个真棒tinker
工具行动
$ PHP工匠修补匠 [1]> Schema :: create('really_long_table_name',function($ table){$ table-> increments('id');}); // 空值 [2]> DB :: table('really_long_table_name') - > insert(['id'=> null]); // true [3]> DB :: table('really_long_table_name AS t') - > select('t.id AS uid') - > get(); // array( // 0 => object(stdClass)( //'uid'=>'1' //) //)
在雄辩的模型上使用别名修改你的代码是这样的:
Item ::from( 'items as items_alias' ) ->join( 'attachments as att', DB::raw( 'att.joined_col' ), '=', DB::raw( 'items_alias.id' ) ) ->select( DB::raw( 'items_alias.*' ) ) ->get();
这将自动添加表前缀到表名称并返回一个Items
模型的实例。 不是一个简单的查询结果。 添加DB::raw
可防止laravel将表前缀添加到别名。
与AMIB相同,对于软删除错误“Unknown column'table_alias.deleted_at'”,只需要添加 – > withTrashed()然后自己处理它,就像“ – > whereRaw('items_alias.deleted_at IS NULL')”
这是如何做到这一点。 我会举一个join的例子,以便对某人变得非常清楚。
$products = DB::table('products AS pr') ->leftJoin('product_families AS pf', 'pf.id', '=', 'pr.product_family_id') ->select('pr.id as id', 'pf.name as family_name', 'pf.id as family') ->orderBy('pr.id', 'desc') ->get();
希望这可以帮助。