重写CakePHP约定。一个表有2列相同型号的表

时间:2013-12-04 19:21:33

标签: cakephp model conventions

假设我有一个表/型号产品。 假设我有一个表/模型Equivalencies,其列中包含2:

  • original_id
  • equivalent_id

original_id和equivalent_id都将外键作为Products的主键。所以,我不能遵循将original_id命名为product_id的惯例,因为我还必须处理equivalent_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' => ''
    ),
);

有人能告诉我这是不是应该怎么做?

我想要的东西 我希望能够找到给定产品的所有等价物,但条件超过关系(具有original_id,equivalent_id的条件)。 这不起作用:

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

1 个答案:

答案 0 :(得分:0)

你的模型很好,这就是你应该这样做的方式。

您的寻找电话不是。

试试这个

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