如何在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(); 

希望这可以帮助。