首页 > 解决方案 > 使用 laravel 查询获取错误的 ID

问题描述

我在下面有查询,但它返回错误的 ID。

$selectedAdmins = DB::table('organization_admins')
    ->whereIn('organization_admins.user_id', function($query) use ($id) {
        $query->where('project_admins.project_id', $id)->select('user_id')
                ->from('project_admins');
    })
    ->join('users', 'users.id', '=', 'organization_admins.user_id')
    ->join('profiles', 'profiles.user_id', '=', 'users.id')
    ->select(
        'organization_admins.id as id',
        'users.email as email',
        'users.username as username',
        'profiles.mobilePhone1 as phone',
        'users.id as userId'
    )
    ->get();

我需要得到as id的是id of project_admins table. 我试图添加部分替换id但没有运气。select()organization_admins.id as idproject_admins.id as id

任何想法?

更新

如果我使用'project_admins.id as id',我会得到这个错误:

消息:“SQLSTATE [42S22]:未找到列:1054 '字段列表'中 的未知列' project_admins.id'(SQL:选择.as ,.as , project_admins.as idid.as ,.as from inner join on users. = . . = . where . not in (select from where . = 2))上的 内部连接"emailemailusersusernameusernameprofilesmobilePhone1phoneusersiduserIdorganization_adminsusersusersidorganization_adminsuser_idprofilesprofilesuser_idusersidorganization_adminsuser_iduser_idproject_adminsproject_adminsproject_id

标签: phplaravel

解决方案


您无法从表中获取任何字段,project_admins因为此信息在子查询中。您将不得不重组查询来实现这一点。

您可以开始查询project_admins,并加入组织管理员。这样您也可以访问 project_admins :(仅限 SQL 查询,您将弄清楚如何在 laravel 中进行操作):

SELECT
    project_admins.id as id,
    users.email as email,
    users.username as username,
    profiles.mobilePhone1 as phone,
    users.id as userId

FROM
    project_admins

LEFT JOIN
    organization_admins
ON
    organization_admins.user_id = project_admins.user_id

LEFT JOIN
    users
ON
    users.id = organization_admins.user_id

LEFT JOIN
    profiles
ON
    profiles.user_id = user.id

WHERE
    organization_admins.user_id IS NOT NULL /* only select rows where project organization admin exists */
AND
    project_admins.project_id = $id

请注意,这是未经测试的,并且由于我不知道您的表结构可能不正确,但它应该可以理解。


推荐阅读