Help us understand the problem. What is going on with this article?

Phalconのモデルでindex hintを使う

More than 3 years have 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ですが、オールドタイプなので何がいいのか未だに理解できないでいます。

albyte
オールドタイプ&ナマケモノ&賞味期限ギリギリのバリペチパーです。 好きなものは、PhpStorm!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away