think-orm icon indicating copy to clipboard operation
think-orm copied to clipboard

withJoin和withoutField不能连用吗?

Open augushong opened this issue 3 years ago • 1 comments

使用withJion连表查询,希望主表某个字段不要查询,再使用withoutField,会报错,因为withoutField设置的field没有表名。

不使用withoutField时:

SELECT
    `system_admin`.`id`,
    `system_admin`.`auth_id`,
    `system_admin`.`head_img`,
    `system_admin`.`username`,
    `system_admin`.`password`,
    `system_admin`.`phone`,
    `system_admin`.`remark`,
    `system_admin`.`login_num`,
    `system_admin`.`sort`,
    `system_admin`.`status`,
    `system_admin`.`create_time`,
    `system_admin`.`update_time`,
    `system_admin`.`delete_time`,
    `system_admin`.`nickname`,
    `system_admin`.`email`,
    `system_admin`.`wechat_official_account_openid`,
    `system_admin`.`notifications_setting`,
    `system_admin`.`uid`,
    `systemAuth`.`id` AS `systemAuth__id`,
    `systemAuth`.`title` AS `systemAuth__title`
FROM
    `ea_system_admin` `system_admin`
    LEFT JOIN `ea_system_auth` `systemAuth` ON `system_admin`.`auth_id` = `systemAuth`.`id`
WHERE
    `system_admin`.`delete_time` IS NULL
ORDER BY
    `system_admin`.`sort` DESC,
    `system_admin`.`id` DESC
LIMIT
    0, 15

使用时,除了正确的字段,后面还多了一批字段:

SELECT
    `system_admin`.`id`,
    `system_admin`.`auth_id`,
    `system_admin`.`head_img`,
    `system_admin`.`username`,
    `system_admin`.`password`,
    `system_admin`.`phone`,
    `system_admin`.`remark`,
    `system_admin`.`login_num`,
    `system_admin`.`sort`,
    `system_admin`.`status`,
    `system_admin`.`create_time`,
    `system_admin`.`update_time`,
    `system_admin`.`delete_time`,
    `system_admin`.`nickname`,
    `system_admin`.`email`,
    `system_admin`.`wechat_official_account_openid`,
    `system_admin`.`notifications_setting`,
    `system_admin`.`uid`,
    `systemAuth`.`id` AS `systemAuth__id`,
    `systemAuth`.`title` AS `systemAuth__title`,
    `id`,
    `auth_id`,
    `head_img`,
    `username`,
    `password`,
    `phone`,
    `remark`,
    `login_num`,
    `sort`,
    `status`,
    `create_time`,
    `update_time`,
    `delete_time`,
    `nickname`,
    `email`,
    `wechat_official_account_openid`,
    `notifications_setting`,
    `uid`
FROM
    `ea_system_admin` `system_admin`
    LEFT JOIN `ea_system_auth` `systemAuth` ON `system_admin`.`auth_id` = `systemAuth`.`id`
WHERE
    `system_admin`.`delete_time` IS NULL
ORDER BY
    `system_admin`.`sort` DESC,
    `system_admin`.`id` DESC
LIMIT
    0, 15

会导致报错: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in field list is ambiguous

无论在withoutField中怎样的写法都不行:

->withoutField('system_admin.password')
->withoutField('password')

augushong avatar Apr 29 '22 06:04 augushong

@liu21st

augushong avatar Jun 06 '22 10:06 augushong