不幸的是,Laravel查询构建器看起来心情不好!
这是我的表结构:
表user
结构
ID, USERNAME, NAME, USER_ROLE_MODULE_ID
表user_role_module
结构
ID, NAME
这是我的查询构建器声明
DB::table('user')
->leftJoin('user_role_module', 'user.user_role_module_id', '=', 'user_role_module.id')
->select('user.*', 'user_role_module.name as user_role')
->where("name LIKE '%Jhon%' ") "or other example" ->where("user_role LIKE '%admin%' ")
->paginate(10);
目标:
我只想从user
获取来自user_role_module
的用户角色名称的所有数据,并且也适用于WHERE语句,因此我可以将其用于搜索功能。
我从WHERE语句获取结果而没有指定表名。因为它已经说明了从SELECT语句中选择哪个表和列。
问题:
如果我搜索名称,则返回错误含糊不清的列//无论是从用户表还是user_role_module表中取出name
,Laravel都会感到困惑!
如果我搜索user_role,则该列不存在
为什么?解决办法是什么?
答案 0 :(得分:1)
改变这个:
DB::table('user')
->leftJoin('user_role_module', 'user.user_role_module_id', '=', 'user_role_module.id')
->select('user.*', 'user_role_module.name as user_role')
->where("name LIKE '%Jhon%' ") "or other example" ->where("user_role LIKE '%admin%' ")
->paginate(10);
用这个:
DB::table('user')
->leftJoin('user_role_module', 'user.user_role_module_id', '=', 'user_role_module.id')
->where('user.name', 'like', '%Jhon%')
->select('user.*', 'user_role_module.name as user_role')
->get();
并进行自定义分页,因为select不使用paginate。
答案 1 :(得分:1)
问题:
user.NAME <-- both these columns are called NAME
user_role_module.NAME <--
您的Laravel查询存在多个问题。正如@Viktor正确指出的那样,你的连接条件是错误的。您应该加入user.USER_ROLE_MODULE_ID
到user_role_module.id
。但我认为错误的直接原因是两个表都有一个NAME
列。
只需使用表和列名称指定所需的列。这样,任何列名都不会有歧义。
DB::table('user')
->leftJoin('user_role_module', 'user.USER_ROLE_MODULE_ID', '=', 'user_role_module.id')
->select('user.ID', 'user.USERNAME', 'user.NAME AS userName',
'user_role_module.name as user_role')
->where("name LIKE '%John%'")
->paginate(10);