【问题标题】:CakePHP model relation having 2 foreign key on the same tableCakePHP 模型关系在同一张表上有 2 个外键
【发布时间】:2014-07-22 15:27:35
【问题描述】:

我有这个数据库设计

Applicant Table
id | country_id | country_now_id

Country Table
id | name

country_id 是 Country Table 的 FK,country_now_id 也是 Country Table 的 FK。我的问题是如何在模型关系中写这个?

我有这个代码:

class Applicant extends AppModel { 
  public $belongsTo = array(
                      'Country'=>array(
                          'className'=>'Country',
                          'foreignKey'=>'country_id'
                        ),

                      );
                      .....

我不知道如何添加 country_now_id 并将其置于该关系中。我什至不确定使用$belongsTo 是否正确。我还是 CakePHP 框架的新手。非常感谢您的帮助!

谢谢! :)

【问题讨论】:

  • 您希望将其放入单个关联的任何具体原因(顺便说一句,这是不可能的)?你希望它做什么?
  • 这就是他们设计数据库的方式,我知道太糟糕了..顺便说一句,我已经设法解决了那个问题。顺便谢谢:)
  • 嗯,这不一定是一个糟糕的设计,我只是想确保我正确理解你想要实现的目标:)
  • @ndm 对。那么 country_now_id 表示申请人当前工作的地方,而 country_id 表示申请人出生的地方。 :)

标签: php cakephp cakephp-model


【解决方案1】:

更新:我设法通过这样做解决了这个问题

  public $belongsTo = array(
                        'Job'=>array(
                          'className'=>'Job',
                          'foreignKey'=>'psm_id',
                        ),
                      'Country'=>array(
                          'className'=>'Country',
                          'foreignKey'=>'country_id'
                        ),
                        'NowCountry'=>array(
                          'className'=>'Country',
                          'foreignKey'=>'now_country'
                        ),
                      );

【讨论】:

    【解决方案2】:

    试试

    class Applicant extends AppModel { 
        public $belongsTo = array(
                      'Country'=>array(
                          'className'=>'Country',
                          'foreignKey'=>'country_id'
                        ),
                      'CountryNow' => array(
                          'className' => ' Country',
                          'foreignKey' => 'country_now_id'
                      )
    
                      );
                      .....
    

    那样的话,如果你这样做了

    $this->Applicant->find('all', array('contain'=>array('Country', 'CountryNow')
    

    例如,你会得到类似的东西

    Applicant1
      Country
      CountryNow
    Applicant2
      Country
      CountryNow
    

    您正在以正确的方式使用belongsTo...暂时。但是,除非您向我们解释为什么要使用这种类型的关系,否则我们实际上无法确定。例如,如果您希望一个申请人拥有两个国家,那么好吧,您很好。但是申请人是否有可能拥有两个以上的国家?如果这可能发生,那么模型的结构将变得很痛苦。如果可以,也许重新考虑逻辑,如果不能,我们希望永远有两个国家。

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多