Laravel使用DB的select查询时,在查询结果中增加一个字段并指定固定值

前言:假设在关联查询中(参考巧用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的左边为新增字段的固定值,右边才是新增字段的字段名,此时字段名不用加引号,如果固定值为数值型则不用加引号,如果固定值为其他类型则必须加引号

 

 

 

你可能感兴趣的:(laravel,mysql)