我試圖從hasMany和belongsTo關聯鏈接的兩個表中拉出一些信息。Cakephp 2.0:複雜查找查詢
申請的hasMany位置和地點屬於關聯徵用
TABLE `requisitions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`fecha_generacion` date NOT NULL,
`solicitado_a` varchar(60) NOT NULL,
`proyecto` varchar(150) NOT NULL,
`obra_no` varchar(11) NOT NULL,
`observaciones` text NOT NULL,
PRIMARY KEY (`id`)
)
and
TABLE `locations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`requisition_id` int(11) NOT NULL,
`fecha` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`name` enum('pendiente','tecnico','existencia','cotizando','generar_o','archivada')
NOT NULL DEFAULT 'pendiente',
`image_path` varchar(150) NOT NULL DEFAULT 'estado0.png',
`note` text NOT NULL,
PRIMARY KEY (`id`)
)
申請從一個地方轉到另一個,我需要通過一個給定的位置爲「pendiente」,「TECNICO」來跟蹤其當前位置的期待.. 因此,我需要爲每個申請生成一個帶有最後一個位置的列表,然後通過Location來篩選該列表。
我相信唯一能做到這一點的方法是圍繞另一個查詢進行查詢,所以我試圖首先用更簡單的查詢來理解cakephp語法。
我正在嘗試從我的RequisitionsController中搜索最後一個'pendiente'位置,並顯示下一個代碼。
$lastPendiente = $this->Requisition->Location->find('all', array(
'conditions' => array('Location.name' => 'pendiente'),
'fields' => array('MAX(Location.id) AS olderLocation', 'Location.requisition_id'),
'group' => 'Requisition.id',
));
我有查詢
SELECT MAX(`Location`.`id`) AS olderLocation, `Location`.`requisition_id` FROM `petrofil_demo`.`locations` AS `Location` LEFT JOIN `petrofil_demo`.`requisitions` AS `Requisition` ON (`Location`.`requisition_id` = `Requisition`.`id`) WHERE `Location`.`name` = 'pendiente' GROUP BY `Requisition`.`id`
輸出...
array(
(int) 0 => array(
(int) 0 => array(
'olderLocation' => '22'
),
'Location' => array(
'requisition_id' => '29'
)
),
(int) 1 => array(
(int) 0 => array(
'olderLocation' => '5'
),
'Location' => array(
'requisition_id' => '30'
)
),
(int) 2 => array(
(int) 0 => array(
'olderLocation' => '13'
),
'Location' => array(
'requisition_id' => '31'
)
)
)
...因爲那些正是以「pendiente的位置,但這裏的最後申請,這是偉大來了第二個查詢或我無能爲力的情況。我需要確定我的申請最後一個狀態是'pendiente',而不是另一個可能的位置。例如,我的requisition_id => 30最後一個地點確實是'tecnico',所以我需要找到一種方法將其排除在我的結果上。