CakePHP3になり、クエリービルダーとかに変わって、ぐぇぇと言いながら取り組んでいます。
ここに、Shipmentというモデルと、1対他の関係にある、Deliveryというモデルがあります。
Shipment has many Deliveries という関係です。
Deliveryには、重量を示すweightというフィールドがあります。
で、Shipmentから、DeliveryをShipmentでまとめた場合、同じShipmentの中のDeliveryのweightの最大値を求める時、どうしたらいいのでしょうか。
データベースアクセス & ORM クエリビルダ
を見ながら、試行錯誤で次のようにできました。
//ShipmentsControkker内で
$query = $this->Shipments->find()->contain([
'Deliveries'=> function ($q) {
return $q
->select(['id','offer_id', 'weight'])
->select(['max_weight' => $q->func()->max('weight')])
->group('offer_id');
},
->select(['id', 'status']);
debug($query->toArray());
