Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修复同时使用HasMany和HasManyThrough在haswhere中主表名字不一致问题导致sql错误问题(没有详细测试过现在能跑而已) #665

Closed
wants to merge 1 commit into from

Conversation

ganluo960214
Copy link

@ganluo960214 ganluo960214 commented Feb 5, 2025

修复同时使用HasMany和HasManyThrough在haswhere中主表名字不一致问题导致sql错误问题(没有详细测试过现在能跑而已)

<?php

namespace app\controller;

use app\BaseController;
use think\Model;
use think\response\Json;

class ZhongDianRenWu extends Model{
    function ZhongDianRenWuChengBanDanWei()
    {
        return $this->hasMany(ZhongDianRenWuChengBanDanWei::Class,'zhong_dian_ren_wu_id');
    }
    function ZhongDianRenWuShangBaoNeiRong()
    {
        return $this->hasManyThrough(ZhongDianRenWuShangBaoNeiRong::Class,  ZhongDianRenWuChengBanDanWei::Class);
    }
}
class ZhongDianRenWuChengBanDanWei extends Model{

}
class ZhongDianRenWuShangBaoNeiRong extends Model{

}

class Index extends BaseController
{
    public function index()
    {
        $zhongYaoRenWuModel = new ZhongDianRenWu();
        $zhongYaoRenWuModel = $zhongYaoRenWuModel->with([
            'ZhongDianRenWuChengBanDanWei',
            'ZhongDianRenWuShangBaoNeiRong',
        ])->haswhere(
            'ZhongDianRenWuChengBanDanWei',[]
        )->haswhere(
            'ZhongDianRenWuShangBaoNeiRong',[]
        )->page(PAGE)->limit(LIMIT)->select();


        return \json($zhongYaoRenWuModel);
    }

}

修复前

SELECT 
    `ZhongDianRenWu`.*, `zhong_dian_ren_wu`.* --  `zhong_dian_ren_wu`.* 会被移除
FROM
    `zhong_dian_ren_wu` `zhong_dian_ren_wu`
        JOIN
    `zhong_dian_ren_wu_cheng_ban_dan_wei` `ZhongDianRenWuChengBanDanWei` ON `ZhongDianRenWu`.`id` = `ZhongDianRenWuChengBanDanWei`.`zhong_dian_ren_wu_id`
        INNER JOIN
    `zhong_dian_ren_wu_cheng_ban_dan_wei` ON `zhong_dian_ren_wu_cheng_ban_dan_wei`.`zhong_dian_ren_wu_id` = `zhong_dian_ren_wu`.`id`
        JOIN
    `zhong_dian_ren_wu_shang_bao_nei_rong` ON `zhong_dian_ren_wu_shang_bao_nei_rong`.`zhong_dian_ren_wu_cheng_ban_dan_wei_id` = `zhong_dian_ren_wu_cheng_ban_dan_wei`.`id`
GROUP BY `zhong_dian_ren_wu_shang_bao_nei_rong`.`zhong_dian_ren_wu_cheng_ban_dan_wei_id`
LIMIT 0 , 20;

修复后

SELECT 
    `ZhongDianRenWu`.*
FROM
    `zhong_dian_ren_wu` `ZhongDianRenWu`
        JOIN
    `zhong_dian_ren_wu_cheng_ban_dan_wei` `ZhongDianRenWuChengBanDanWei` ON `ZhongDianRenWu`.`id` = `ZhongDianRenWuChengBanDanWei`.`zhong_dian_ren_wu_id`
        INNER JOIN
    `zhong_dian_ren_wu_cheng_ban_dan_wei` ON `zhong_dian_ren_wu_cheng_ban_dan_wei`.`zhong_dian_ren_wu_id` = `ZhongDianRenWu`.`id`
        JOIN
    `zhong_dian_ren_wu_shang_bao_nei_rong` ON `zhong_dian_ren_wu_shang_bao_nei_rong`.`zhong_dian_ren_wu_cheng_ban_dan_wei_id` = `zhong_dian_ren_wu_cheng_ban_dan_wei`.`id`
GROUP BY `zhong_dian_ren_wu_shang_bao_nei_rong`.`zhong_dian_ren_wu_cheng_ban_dan_wei_id`
LIMIT 0 , 20;

修复同时使用HasMany和HasManyThrough在haswhere中主表名字不一致问题导致sql错误问题(没有详细测试过现在能跑而已)
@ganluo960214 ganluo960214 changed the title Update HasManyThrough.php 修复同时使用HasMany和HasManyThrough在haswhere中主表名字不一致问题导致sql错误问题(没有详细测试过现在能跑而已) Feb 5, 2025
@ganluo960214
Copy link
Author

会引发其他bug

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant