开发者

Error in association or containment

This is one of those times when I know I'm doing something wrong, but I'm apparently deaf, dumb and blind with respect to seeing it. I'm hoping that another pair of eyes can open my own.

I have a ZipCode model and an Incentive model. There is a glorified join table (glorified because it has its own key) sitting in the middle. The join table has id, incentive_id and zip fields (legacy database). My ZipCode model HABTM Incentive as shown:

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

My Incentive model HABTM ZipCode as follows:

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

I have a method, ZipCode::incentives( $zip ) that wants to pull all of the incentives relevant to the specified zip code:

$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开发者_Go百科 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' ),
  )
);

What I get for my trouble is the following error:

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

The ZipCode model's table isn't getting joined in the SQL, but I haven't grasped why yet. It's worth mentioning that the Incentive model is tied to a MySql view, not a table, via $useTable. I haven't seen anything to suggest that it should be a problem in this scenario, but it's non-standard.

If you see what I'm missing, please call 911 or at least drop an answer.


Rob

Move the condition

  'ZipCode.zip' => $zip 

To your contain declaration like this

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

Then continue with the rest of your statement as usual

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜