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

发布于 2022-09-11 19:23:28 字数 1880 浏览 16 评论 0

问题

多表查询里的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);

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瞎闹 2022-09-18 19:23:28

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文