参照する機会が多いので自分用にペタリ。
リレーションに関する解説としてとても参考になるページをみつけたのでペタリ。
http://www.exgear.jp/blog/2010/10/doctrine_association/
なかなか日本語の文献が少ないから、初学者にとってはありたがい。
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
すごく説明しづらい。
ようはEntity内にある外部Entityが格納されているメンバ変数を空にしたい時。
ArrayCollection()のclear()メソッドを実行してやれば空にすることが出来る。
例。
$entity->getCategories()->clear();
的な感じ。
詳細は下記URLを参照。
メモ。
$data = $this->getRequest()->request->all();
リクエストオブジェクトが注入されている場合は下記のような感じ。
$data = $request->request->all();
めも。
$builder ->add('categories', 'entity', [ 'class' => 'HogeFugaBundle:Category', 'property' => 'name', 'multiple' => true, 'expanded' => true ]);
的な感じ。
紐付けてるカラム同士の型やサイズなど、全てが同じように生成されているかを確認する。
たとえば下記のように怒られた時。
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属性が与えられていたのでエラーとなってしまっていた。
app_dev.phpの先頭に下記を追加。
function vd($var) { \Doctrine\Common\Util\Debug::dump($var); die(); }
これがないとほんとやってられない。