3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(CakePHP)findAllでのレコードの取得順序の指定方法

久しぶりにメンテのため CakePHP 触ったのですが、使い方ほとんど忘れかけてますorz

とりあえず、DBの商品テーブルから取得した項目に対して価格順に並べ変えて欲しいという依頼だったので、調べたら、findAllの引数で指定できるんですね。

下記のように第三引数に指定するだけでいいっぽいです。

$this->Product->findAll("prd_del=0" , null , "prd_price DESC" );

上記の条件だと下記のようなSQLと等価になります。

SELECT *

FROM Products

WHERE prd_del = 0

ORDER BY prd_price DESC

参考までに、findAllの書式です。

findAll(string $conditions, array $fields, string $order, int $limit, int $page, int $recursive)

$conditions : 取得する条件。where句に相当。(省略時は全件取得)

$fields : 取得するフィールドリスト。select句に相当。(省略時は全フィールド取得)

$order : レコードの取得順。order by句に相当。(省略時はレコードの格納順)

$limit : 取得する件数。(省略時は全件取得)

$page : 取得するページ数(よくわかりません)

$recursive : 再帰的に取得するアソシエーションの深さ(アソシエーション使ってないのでよくわかりません)

で、CakePHP公式マニュアル 3.7.3.2 findAll「findAll は非推奨となりました。代わりに find('all') を使用してください。」って書いてました。

どうやらいつの間にか findAll 非推奨になったんですね。(多分1.2 RTM リリースの時かな? 今回のメンテサイトは1.2RC版使ってるので)

技術の変化が激しいWeb,オープンソースの世界、ちょっとでも最新に乗り遅れると浦島太郎になってしまいます。。。。