hasMany アソシエーションと belongsTo アソシエーションによってリンクされた 2 つのテーブルから情報を取得しようとしています。
求人には多くの場所があり、場所は求人に属しています
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`)
)
要求はある場所から別の場所に移動し、特定の場所を「ペンディエンテ」、「テクニコ」として見て、現在の場所を追跡する必要があります...したがって、各要求の最後の場所を含むリストを生成し、フィルタリングする必要がありますLocation.nameによるそのリスト
これを行う唯一の方法は、別のクエリの周りにクエリを使用することだと思うので、最初に、より単純なクエリを使用して CakePHP の構文を理解しようとしています。
RequisitionsController からの次のコードを使用して、最後の「ペンディエンテ」の場所を検索しようとしていました。
$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'
)
)
)
...これは素晴らしいことです。なぜなら、これらはまさに「ペンディエンテ」の場所を持つ最後の要求だからですが、ここでは 2 番目のクエリまたは私が無知な状態です。要求の最後の状態が「ペンディエンテ」であり、別の可能な場所ではないことを確認する必要があります。たとえば、私の requisition_id =>30 最後の場所は実際には「tecnico」であるため、結果に表示されないようにする方法を見つける必要があります。