我试图找到一个用户电子邮件时,我知道的项目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变量中。

10-06 14:12
查看更多