Archives by date

You are browsing the site archives by date.

【Symfony2.3】stof/doctrine-extensionsのSoftDeleteable設定方法。

エンティティクラスのアノテーションで下記のような感じで指定してやればOK。

例)
deletedAtカラムを論理削除管理カラムとして使用する場合。


use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * User
 *
 * @ORM\Table(name="users")
 * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
 */
class User
{
}

 

【Symfony2.3】基本的に追加している外部バンドルまとめ。


...

    "require": {

        ...

        "jms/di-extra-bundle": "1.4.*@dev",
        "friendsofsymfony/user-bundle": "2.0.*@dev",
        "friendsofsymfony/rest-bundle": "1.5.*@dev",
        "stof/doctrine-extensions-bundle": "1.2.*@dev",
        "doctrine/doctrine-fixtures-bundle": "2.2.*@dev",
        "doctrine/migrations": "1.0.*@dev",
        "doctrine/doctrine-migrations-bundle": "2.1.*@dev",
        "jms/serializer-bundle": "0.13.*@dev",
        "knplabs/knp-paginator-bundle": "2.4.*@dev"
    },

...

 

【Mysql/Doctrine2】where句の記述順によるパフォーマンスの違い。

select時のそういった最適化は全てオプティマイザーが最適解を求めてくれているのかと思い込んでいたがどうやらそういうわけでもない模様。

下記に示す二つのDQLで大きくパフォーマンスが違う。

■パターン1

    select
        p
    from
        HogeFugaBundle:Post as p
    where
        p.body like :str
    and
        p.deletedAt is null
    and
        p.createdAt >= :date

■パターン2

    select
        p
    from
        HogeFugaBundle:Post as p
    where
        p.createdAt >= :date
    and
        p.deletedAt is null
    and
        p.body like :str

だいたいレコード25万くらいのテーブルで実験したところ、パターン1が30秒前後、パターン2が2~3秒といった結果になった。
ある意味素直に最初に指定した条件から順番に絞り込むってことだね。そりゃ25万件のlikeは重いわ。

っていうお話。