我试图找到一个用户电子邮件时,我知道的项目id。
例如,在我的表项目中,我有一个记录:
id:1用户id:6
我知道想在我的用户表中找到用户6的电子邮件:例如:
id:6电子邮件:hello@gmail.com
因此我想得到hello@gmail.com
我试过这种方法,但似乎没用:
$projectOwnerEmail = DB::table('users')
->select('email')
->where('id', '=', $input['project_id'])
->join('projects', 'users.id', '=', 'projects.user_id')
->get();
非常感谢!
最佳答案
使用查询生成器创建的查询如下:
SELECT email
FROM users
INNER JOIN projects ON users.id = projects.user_id
WHERE id = ?
问题是,在评估条件时,无法确定是要比较
id
表的users
还是id
表的projects
。这将导致完整性约束冲突错误:SQLSTATE[23000]:完整性约束冲突:where子句中的1052列“id”不明确
要解决此问题,只需为
id
列指定表,如下所示:->where('projects.id', '=', $input['project_id'])
此外,使用
get
将返回一个集合,这是可以的,因为您可以像这样访问电子邮件$projectOwnerEmail[0]->email
,但这感觉太复杂了。相反,您可以使用pluck
来返回包含电子邮件地址的字符串:$projectOwnerEmail = DB::table('users')
->select('email')
->where('projects.id', '=', $input['project_id'])
->join('projects', 'users.id', '=', 'projects.user_id')
->pluck('email');
现在,电子邮件字符串直接存储在
$projectOwnerEmail
变量中。