Отношение модели CakePHP с двумя внешними ключами в одной таблице

У меня есть этот дизайн базы данных

Applicant Table
id | country_id | country_now_id

Country Table
id | name

Country_id — это FK таблицы стран, а country_now_id также является FK таблицы стран. Мой вопрос в том, как бы я написал это в отношении модели?

У меня есть этот код:

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

                      );
                      .....

Я не знаю, как добавить country_now_id и поместить его в это отношение. Я даже не уверен, правильно ли использовать $belongsTo. Я все еще новичок в CakePHP Framework. Ваша помощь будет принята с благодарностью!

Спасибо! :)


person PinoyStackOverflower    schedule 22.07.2014    source источник
comment
Любая конкретная причина, по которой вы хотели бы поместить это в единую ассоциацию (что, кстати, невозможно)? Что вы ожидаете от этого?   -  person ndm    schedule 22.07.2014
comment
Именно так они проектируют базу данных, слишком плохо я знаю.. Кстати, мне уже удалось решить эту проблему. Кстати спасибо :)   -  person PinoyStackOverflower    schedule 22.07.2014
comment
Ну, это не обязательно плохой дизайн, я просто хотел убедиться, что правильно понимаю, чего вы пытаетесь достичь :)   -  person ndm    schedule 22.07.2014
comment
@ndm Верно. Country_now_id означает, где заявитель работает в настоящее время, а country_id — это место, где заявитель родился. :)   -  person PinoyStackOverflower    schedule 23.07.2014


Ответы (2)


Обновление: мне удалось решить эту проблему, сделав это

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

Пытаться

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 правильно... пока. Но на самом деле мы не можем знать наверняка, если вы не объясните нам, почему вы используете этот тип отношений. Например, если вы хотите, чтобы у одного заявителя было две страны, то все в порядке. Но есть ли шанс, что у заявителя будет более двух стран? Если бы это могло случиться, то структура ваших моделей стала бы головной болью. Если вы можете, возможно, переосмыслите логику, если нет, будем надеяться, что всегда есть две страны.

person Nunser    schedule 22.07.2014