版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
前言:假设在关联查询中(参考巧用union联合查询实现对分表或相似结构表的多表操作),查询出三张表的含有id和title等相同字段的数据N条,现在需要有一个字段来分清这N条数据属于那张表查询到的。
实现:
我们在查询的时候,就可以在返回结果中新增一个字段table_name,并指定值为指定表名。
select *,"videos" as
table_name from videos;
- sql原生查询语句
- Laravel在DB的select查询使用DB::raw(
)
$videos=DB::table('videos')->select([DB::raw('"videos" as table_name'),'id','title','sub_title','user_id','category_id','status','verify_status','created_at','deleted_at']);
$article=DB::table('articles')->select([DB::raw('"articles" as table_name'),'id','title','sub_title','user_id','category_id','status','verify_status','created_at','deleted_at']);
$query=DB::table('pictures')->select([DB::raw('"pictures" as table_name'),'id','title','sub_title','user_id','category_id','status','verify_status','created_at','deleted_at'])->unionAll($videos)->unionAll($article);
$querySql = $query->toSql();
$result = DB::table(DB::raw("($querySql) as r"))
->mergeBindings($query)
->orderBy('deleted_at','asc')
->whereNotNull('deleted_at')
->get();
注意上面的格式,使用关键字as,as 可理解为:用作、当成,作为;平常使用as是为字段取一个别名,as的左边是一个原始字段名,右边是新的别名,该别名会显示在查询结果中,而原始字段名代表的就是该字段的值; 此处为新增字段指定固定值,as的左边为新增字段的固定值,右边才是新增字段的字段名,此时字段名不用加引号,如果固定值为数值型则不用加引号,如果固定值为其他类型则必须加引号