答案很簡單:
不能在find()
模型上的三深似運行。取而代之的是,儘量只加載模型,然後運行該find()
:
$this->loadModel('PaypalTransaction');
$oneDayAgo = date('Y-m-d H:i:s', strtotime('-1 day'));
$toBeConfdBookings = $this->PaypalTransaction->find('all', array('conditions' => array('PaypalTransaction.created' > $oneDayAgo)));
(你只能運行在加載模型或模式,都直接關係到加載模型find()
S)
回答我是如何首先解釋你的問題的:
通常當你想拉相關的結果時,這非常簡單 - 只需使用CakePHP's Containable Behavior即可。
但是,您要做的是獲取相關模型數據和根據相關模型限制結果。因此,由於Containable會創建單獨的查詢,因此無法根據相關模型進行限制 - 在這種情況下,您需要使用joins
。
代碼示例:
$oneDayAgo = date('Y-m-d H:i:s', strtotime('-1 day'));
$this->loadModel('Booking'); // if neccessary
$paypalTransactions = $this->Booking->find('all', array(
'conditions' => array(
'Booking.equipment_id' => $equipmentId
),
'contain' => array(
'Equipment'
),
'joins' => array(
array('table' => 'paypal_transactions',
'alias' => 'PaypalTransaction',
'type' => 'INNER',
'conditions' => array(
'PaypalTransaction.booking_id = Booking.id',
"PaypalTransaction.created > '".$oneDayAgo."'"
)
)
));
上面的代碼基本上寫着:
- 查找:發現由
$equipmentId
- 所擁有的所有預訂包含:也檢索相關設備的數據(可選)
- 的加入:在預訂和支付寶交易只有那些經過前一天的交易發生的限制的結果(和檢索過的交易數據)
你說你想要什麼,什麼你正在嘗試不涉及 - 你想要的設備和/或預訂的條件在哪裏? – Dave