top-think / think

ThinkPHP Framework ——十年匠心的高性能PHP框架
http://www.thinkphp.cn
Other
7.83k stars 1.62k forks source link

v5.1 远程一对多模型关联问题 #1016

Closed FrankDiao closed 4 years ago

FrankDiao commented 4 years ago

数据表结构 A表

字段名 说明
id 主键

B表(中间表)

字段名 说明
id 主键
a_id A表外键
c_id C表外键

C表

字段名 说明
id 主键


A模型中的代码:

$this->hasManyThrough(
      C::class,
      B::class,
      'a_id', 'c_id', 'id'
 );


报错:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'c.c_id' in 'on clause'


生成的SQL语句:

SELECT
    `c`.* 
FROM
    `c` `c`
    INNER JOIN `b` ON `b`.`id` = `c`.`c_id`  #这里的字段弄反了
    INNER JOIN `a` ON `a`.`id` = `b`.`a_id` 
WHERE
    `b`.`a_id` = : ThinkBind

预期的表现:

应该是如下才对:
INNER JOIN `b` ON `b`.`c_id` = `c`.`id`  
FrankDiao commented 4 years ago

该场景不适合远程一对多关联,应该使用多对多关联