Ошибка в ассоциации или сдерживании - PullRequest
0 голосов
/ 23 марта 2011

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

У меня есть модель ZipCode и модель Incentive.Посередине находится прославленный соединительный стол (прославленный, потому что у него есть свой ключ).Таблица соединений имеет поля id, incentive_id и zip (устаревшая база данных).Моя ZipCode модель HABTM Incentive как показано:

  public $hasAndBelongsToMany = array(
    'Incentive' => array(
    'with'                  => 'ZipCodeIncentive',
    'foreignKey'            => 'zip',
    'associationForeignKey' => 'incentive_id',
  ),
);

Моя Incentive модель HABTM ZipCode следующим образом:

public $hasAndBelongsToMany = array(
  'ZipCode' => array(
    'with'                  => 'ZipCodeIncentive',
    'foreignKey'            => 'incentive_id',
    'associationForeignKey' => 'zip',
),

У меня есть метод, ZipCode::incentives( $zip )который хочет использовать все стимулы, относящиеся к указанному почтовому индексу:

$incentives = $this->Incentive->find(
  'all',
  array(
    'contain'    => array( 'ZipCode' ),
    'fields'     => array( 'Incentive.id', 'Incentive.name', 'Incentive.it_name', 'Incentive.amount', 'Incentive.state', 'Incentive.entire_state', 'Incentive.excluded', 'Incentive.is_active' ),
    'conditions' => array(
      'Incentive.excluded'  => 0,
      'Incentive.is_active' => 1,
      'OR' => array(
        'Incentive.state' => 'US',  # nationwide incentives
        array(
          # Incentives that apply to the entire state the zip code belongs to
          'Incentive.entire_state' => 1,
          'Incentive.state'        => $state,
        ),
        'ZipCode.zip' => $zip # specific to the building's zip code
      )
    ),
    'order' => array( 'Incentive.amount DESC' ),
  )
);

Я получаю за свою проблему следующую ошибку:

SQL Error: 1054: Unknown column 'ZipCode.zip' in 'where clause'

Таблица модели ZipCodeне включается в SQL, но я еще не понял почему .Стоит отметить, что модель Incentive связана с MySql представлением , а не с таблицей, через $useTable.Я не видел ничего, что указывало бы на то, что это должно быть проблемой в этом сценарии, но это нестандартно.

Если вы видите, что мне не хватает, пожалуйста, позвоните 911 или хотя бы напишите ответ.

1 Ответ

1 голос
/ 24 марта 2011

Rob

Переместить условие

  'ZipCode.zip' => $zip 

К вашей декларации, как это

 array(
    'contain' => array( 'ZipCode'=> 
                            array('conditions'=>
                                  array('ZipCode.zip' => $zip ))),

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

...