联盟选择CakePHP

时间:2013-06-05 03:33:29

标签: php cakephp

这是一个两部分问题。我找到something similar,但是更复杂的是有更多的表和使用的连接使得它变得更加复杂并且难以转换为我更简化的情况。此外,它不包括我的问题的第二部分。

这发生在我的OrdersController中。我还有ArchivedordersControler和ArchivedOrder模型

  1. 我正在尝试在两个不同的表(订单和archived_orders)中搜索电子邮件地址。我不需要加入任何东西(至少我不认为我必须加入)。两个表都具有完全相同的结构,一个仅用于存档值。

    使用MySQL,我只会做类似

    的事情
    select * from orders where orders.email = '$email'
    Union
    select * from archived_orders where archived_orders.email = '$email'
    
  2. 如何添加某种标识符以了解从中选择哪个表?电子邮件可以显示在两个表格中,但根据从哪个表格中提取的选项会有所不同。

1 个答案:

答案 0 :(得分:-1)

您需要为这两个表OrderArchivedOrder创建一个模型。这样,您可以通过以下方式轻松找到两个表中要查找的数据:

// From OrdersController
$this->Order->find('first', array('conditions' => array('email' => $email)));

// From ArchivedOrdersController
$this->ArchivedOrder->find('first', array('conditions' => array('email' => $email)));

如果您想从原始OrdersController获取存档数据,您也可以从那里加载模型,例如:

$this->loadModel('ArchivedOrder');
$this->ArchivedOrder->find('first', array('conditions' => array('email' => $email)));

这样,您不需要单独的控制器。它将数据作为一个类似于:

的数组返回
array(
    'Order' => array(
         'id' => 12,
         'email' => 'customer@example.com'
         // And other data...
    )
)

所以从Order你可以告诉它是从原始表中选择的。否则,它将是ArchivedOrder