Posted at

Phalconのモデルでindex hintを使う

More than 1 year has passed since last update.


はじめに

Phalconでもどんなframeworkでもですが、ORMを使うとIndex Hintを使う場合など、ちょっとカブいたSQLを書こうとしたらできなかったりしますよね。

だからって生PDOでSELECTしたらModelのfindを使った時とObjectが一致しないので、何かと不便です。

そういう時、Phalconなら、下記の方法で解決できますYO!


before

find使うと、使ってほしいindexが使われないじゃないか!どうしょ・・

$logs = Model\UserLog::find([

"conditions" => "user_id = ?0 AND created BETWEEN ?1 AND ?2",
"bind" => [$user_id, $from, $to],
"order" => "created DESC",
"limit" => 10
]);


after

そういう時は、(ほぼ)生PDOで抽出して、Modelに結果をあてこんじゃいましょう。

$model = new Model\UserLog();

$logs = new \Phalcon\Mvc\Model\Resultset\Simple(
null,
$model,
$model->getReadConnection()->query(
"SELECT * FROM user_log USE INDEX (idx_created) " .
" WHERE user_id = ? AND created BETWEEN ? AND ? " .
" ORDER BY created DESC LIMIT 10",
[$user_id, $from, $to]
)
);

まあ上記のようにサービスに書くくらいなら、Model側に書くべきですよね。。


小言

最近どのFWにも入ってるORMですが、オールドタイプなので何がいいのか未だに理解できないでいます。