Symfony

【Symfony2.3】双方向Many-To-Manyの公式リファレンス。

参照する機会が多いので自分用にペタリ。

http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#many-to-many-bidirectional

 

【Symfony2.3】Doctrine2のリレーションに関するメモ。

リレーションに関する解説としてとても参考になるページをみつけたのでペタリ。

http://www.exgear.jp/blog/2010/10/doctrine_association/

なかなか日本語の文献が少ないから、初学者にとってはありたがい。

 

【Symfony2.3】JMSserializerを用いた際にEntityのjson化深度を設定する。

JoinしまくってるDBなどで、引っ張ってくる深度を設定したい場合
下記のようにMaxDepthを設定してやることで制御可能。

※公式クックブックまんま引用。

use JMS\Serializer\Annotation\MaxDepth;

class User
{
    private $username;

    /** @MaxDepth(1) */
    private $friends;

    /** @MaxDepth(2) */
    private $posts;
}

class Post
{
    private $title;

    private $author;
}

さらなる詳細は下記URLを参照されたし。

http://jmsyst.com/libs/serializer/master/cookbook/exclusion_strategies

 

【Symfony2.3】AllayCollectionの中身を空にする。

すごく説明しづらい。
ようはEntity内にある外部Entityが格納されているメンバ変数を空にしたい時。

ArrayCollection()のclear()メソッドを実行してやれば空にすることが出来る。

例。

$entity->getCategories()->clear();

的な感じ。

詳細は下記URLを参照。

http://stackoverflow.com/questions/11895533/how-to-clear-or-empty-the-array-collection-in-doctrine-symfony

 

【Symfony2.3】リクエストオブジェクトからポストされた値など全てを取り出す。

メモ。

$data = $this->getRequest()->request->all();

リクエストオブジェクトが注入されている場合は下記のような感じ。

$data = $request->request->all();

 

【Symfony2.3】Entityタイプのフォームでチェックボックスを生成する。

めも。

$builder
    ->add('categories', 'entity', [
        'class' => 'HogeFugaBundle:Category',
        'property' => 'name',
        'multiple'      => true,
        'expanded'      => true
    ]);

的な感じ。

 

【Symfony2.3】doctrine:schema:updateの際、ForeignKey周りで怒られたら。

紐付けてるカラム同士の型やサイズなど、全てが同じように生成されているかを確認する。

たとえば下記のように怒られた時。

SQLSTATE[HY000]: General error: 1005 Can't create table X (errno: 150). Failing Query: ALTER TABLE tablename ADD FOREIGN KEY (key_id) REFERENCES table(id)

key_idとidのカラム型は一致しているか、サイズは一致しているか、オプションなどは一致しているかを確認して寸分の狂い無く同一に定義してやれば幸せになれる。

自分の場合、片方だけにunsigned属性が与えられていたのでエラーとなってしまっていた。

 

【Symfony2.3】自分用デバッグ関数。

app_dev.phpの先頭に下記を追加。

function vd($var) {
    \Doctrine\Common\Util\Debug::dump($var);
    die();
}

これがないとほんとやってられない。