LARAVEL多表查询里的where方法如何指定要查询的表名.字段

新手上路,请多包涵

问题

多表查询里的where方法如何指定要查询的表名.字段

比如如下代码

$table_name='relation_game_clue_user';
$table = DB::table($table_name);
//这里的status在game表和user都存在,但是具体想要查找的是relation_game_clue_user表
/**
问题:为什么不把这条where写入到下面的语句中?
因为:查询条件是在另外一个查询方法中完成组装的,而返回的list又是在另外的方法里。
查询方法实现功能:
根据地址栏里的KV对,自动生成where条件
一般性的单表查询或字段不重复的多表查询,无需写一条代码即可实现自定义查询和自定义返回,只需传一个表名进去就可以实现全部代码。
但是现在遇到了一个问题,
如果我是进行多表查询的,而且查询条件中的status字段在多张表中都存在,如下面的代码:
**/
$table=$table->where('status',1);
$table=$table->where('user_id',1);

$list =$table
            ->leftJoin('game','relation_game_clue_user.game_id','game.id')
            ->leftJoin('user','relation_game_clue_user.user_id','user.id')
            ->leftJoin('game_clue','relation_game_clue_user.clue_id','game_clue.id')
            ->offset($num)->limit($limit)
            ->orderby('relation_game_clue_user.id','desc')
            ->select([
                'game.title',
                'user.nickname',
                'user.mobile',
                'user.avater',
                'game_clue.title as clue_title',
                'relation_game_clue_user.id',
                'relation_game_clue_user.game_id',
                'relation_game_clue_user.game_num',
                'relation_game_clue_user.clue_id',
                'relation_game_clue_user.user_id',
                'relation_game_clue_user.status',
                'relation_game_clue_user.c_time',
                'relation_game_clue_user.u_time',
            ])
            ->get();

实际输出的SQL,其他部分都正常
但是问题来了,在WHERE的地方,他会输出

.... WHERE `status`=1 ......

因为在多个表中都存在status字段,所以这条查询语句就报错了,无法确定status在具体哪个表中。

请问,我如何指定status来源自哪个表呢,能否不动$list=的这部分代码,仅修改

$table=$table->where('status',1);
$table=$table->where('user_id',1);

这部分代码即可实现?我希望在查询条件的字段时指定我想要的表名

阅读 3.1k
1 个回答

select 部分你都知道加表名称限制,where 就不会了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进