Переопределение соглашений CakePHP. Одна таблица с двумя столбцами одной модели

Предположим, у меня есть таблица/модель продуктов. Предположим, что у меня есть таблица/модель Equivalencies, которая имеет среди своих столбцов это 2:

  • original_id
  • equivalent_id

И original_id, и analog_id имеют в качестве внешних ключей первичный ключ Products. Таким образом, я не могу следовать соглашению об именах original_id как product_id, потому что мне также приходится иметь дело с эквивалентом_id (который также будет product_id).

Что мне делать?

В настоящее время у меня есть модель продукта, настроенная так:

public $hasMany = array(
 'Original' => array(
 'className' => 'Equivalency',
 'foreignKey' => 'original_id',
 'dependent' => false,
 'conditions' => '',
 'fields' => '',
 'order' => '',
 'limit' => '',
 'offset' => '',
 'exclusive' => '',
 'finderQuery' => '',
 'counterQuery' => '',
 'table' => 'products',
 ),
 'Equivalent' => array(
 'className' => 'Equivalency',
 'foreignKey' => 'equivalent_id',
 'dependent' => false,
 'conditions' => '',
 'fields' => '',
 'order' => '',
 'limit' => '',
 'offset' => '',
 'exclusive' => '',
 'finderQuery' => '',
 'counterQuery' => ''
 ),
);

Может ли кто-нибудь сказать мне, как это должно быть сделано?

Я хочу, чтобы я мог найти все эквивалентности данного продукта, но с условиями над отношением (с оригиналом_ид, analog_id). Это не работает:

$original = $this->Product->find('all',
 array(
 'contain' => 'Product.Original.deleted_equivalent = false',
 'conditions' => array('Product.id' => $id)
 ));
1 ответ

Ваша модель в порядке, что вы должны это делать.

Ваш звонок - нет.

Попробуй это

$original = $this->Product->find('all',
 array(
 'contain' => array('Equivalent'),
 'conditions' => array('Product.id' => $id)
 ));

licensed under cc by-sa 3.0 with attribution.