CakePHP3 グループの中の最大値を取得する

PHP

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());
 
カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です