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());