【问题标题】:Cakephp hasMany with multiple foreign keys that are not primary keysCakephp hasMany 有多个非主键的外键
【发布时间】:2015-08-24 09:36:11
【问题描述】:

我必须使用无法修改的现有数据库。 我需要用 hasMany 关系(SGRPART hasMany SSGART)链接两个表。

困难在于这些表是用两列连接的,没有一个是主键:

表SGRPART的结构:
IDSGRAPART (int 9)
CGRPART (int 9)
CSOUSGRP (int 9)
DESGRPART (varchar 100)

表SSGART的结构:
IDSSGART (int 9)
CGRPART (int 9)
CSOUSGRP (int 9) DESGRPART (varchar 100)

关系应该是: SGRPART.CGRPART = SSGART.CGRPART 和 SGRPART.CSOUSGRP = SSGART.CSOUSGRP

我在 SGRPART 模型中尝试过,但它没有从 SSGART 表中返回相关记录:

class SGRPART extends AppModel
{
public $name = 'SGRPART';
public $useTable = 'SGRPART';
public $primaryKey = 'IDSGRPART';
public $displayField = 'DESGRPART';

var $hasMany = array(
'SSGART' => array(
'foreignKey' => false,
'conditions' => array('SSGART.CGRPART' => 'SGRPART .CGRPART','SSGART.CSOUSGRP'=>'SGRPART .CSOUSGRP')
)
);

}

知道在 Cakephp 中是否可行,如果可行,该怎么做?

谢谢, 詹姆斯

【问题讨论】:

  • 嗨,小建议为什么您使用 hasmany ? hasone 易于使用
  • 我同意,但是对于表 SGRPART 中的每条记录,SSGART 表中的记录不止一条。
  • 不用设置foreignKey对吗?
  • 好吧,foreignKey 必须设置为 null 否则将在与此处无关的主键上进行关联。
  • 我怀疑您将不得不为此使用自定义查找器。我仍在尝试自己解决这个问题。

标签: mysql cakephp foreign-keys has-many


【解决方案1】:

你可以试试这个

public $hasMany = array(
    'SSGART' => array(
        'className' => 'SSGART',
        'foreignKey' => 'IDSGRPART',
        'dependent' => true,
        'conditions' => array('SSGART.CGRPART' => 'SGRPART .CGRPART','SSGART.CSOUSGRP'=>'SGRPART .CSOUSGRP')
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    ),
); 

放入“SGRPART”模型中

【讨论】:

  • 感谢您的建议。但是,我收到一个 sql 错误:错误:SQLSTATE [42S22]:找不到列:1054 '字段列表'中的未知列 'SSGART.IDSGRPART' 这是有道理的,因为表 SSGART 中不存在 IDSGRPART 列。
  • 这不起作用,因为条件只会应用于外部表(SSGART),而不会加入原始表。因此 IDSGRPART 中的列不可用。
猜你喜欢
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多