开发者

Error in association or containment

开发者 https://www.devze.com 2023-02-19 02:15 出处:网络
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.

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

精彩评论

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