2015-03-05 3 views
0

У меня есть следующие таблицы:CakePHP Присоединение же модель дважды

domains (id, name) 
alignments (id, name, description) 
alignments_domains(id, alignment_id, domain_id) 
domains_domains(id, domain_id, authorized_domain_id) 

Все мои внешние ключи сделаны и то, что я пытаюсь добиться, чтобы иметь несколько разрешенных доменов и несколько авторизованного выравнивания для каждого домена.

Дело в том, когда я торт модель выпекать, контроллер и вид у меня есть эта модель:

class Domain extends AppModel 

public $validate = array(
    'name' => array(
     'notEmpty' => array(
      'rule' => array('notEmpty'), 
      //'message' => 'Your custom message here', 


     //'allowEmpty' => false, 
       //'required' => false, 
       //'last' => false, // Stop validation after this rule 
       //'on' => 'create', // Limit validation to 'create' or 'update' operations 
      ), 
     ), 
    ); 

    public $hasAndBelongsToMany = array(
     'Alignment' => array(
      'className' => 'Alignment', 
      'joinTable' => 'alignments_domains', 
      'foreignKey' => 'domain_id', 
      'associationForeignKey' => 'alignment_id', 
      'unique' => 'keepExisting', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '', 
      'limit' => '', 
      'offset' => '', 
      'finderQuery' => '', 
     ), 
     'Domain' => array(
      'className' => 'Domain', 
      'joinTable' => 'domains_domains', 
      'foreignKey' => 'domain_id', 
      'associationForeignKey' => 'domain_id', 
      'unique' => 'keepExisting', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '', 
      'limit' => '', 
      'offset' => '', 
      'finderQuery' => '', 
     ), 
     'Role' => array(
      'className' => 'Role', 
      'joinTable' => 'roles_domains', 
      'foreignKey' => 'domain_id', 
      'associationForeignKey' => 'role_id', 
      'unique' => 'keepExisting', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '', 
      'limit' => '', 
      'offset' => '', 
      'finderQuery' => '', 
     ) 
    ); 

} 

Но когда я пытаюсь вставить новый домен, он дает мне эту ошибку:

Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`mythall_php`.`alignments_domains`, CONSTRAINT `alignments_domains_ibfk_2` FOREIGN KEY (`domain_id`) REFERENCES `domains` (`id`)) 

Есть ли у вас какие-либо предложения о том, как я могу сделать это возможным? Спасибо!

ответ

0

Решения, которое я нашел в том, чтобы изменить hasandbelongtomany «домен» в «authorized_domain» и связанный с ним внешним ключом «authorized_domain_id», а затем выпечка работает должным образом.

'Authorized_Domain' => array(
      'className' => 'Domain', 
      'joinTable' => 'domains_domains', 
      'foreignKey' => 'domain_id', 
      'associationForeignKey' => 'authorized_domain_id', 
      'unique' => 'keepExisting', 
      'conditions' => '', 
      'fields' => '', 
      'order' => '', 
      'limit' => '', 
      'offset' => '', 
      'finderQuery' => '', 
     ) 
0

Я новичок в cakephp.

Я испытываю этот тип ошибок. моя ошибка в том, что я добавил больше строк перед настройкой внешнего ключа.

попробуйте опорожнить эти четыре таблицы в phpmyadmin (еще раз проверьте ограничения отношений) добавьте домен, выровняйте и сделайте там.

и проверить этот сайт для некоторой ссылки: enter link description here

Смежные вопросы