Symfony2 勉強中の yuki です。
下記の論理削除を用いた開発でのことで、アドバイスをいただきたいことがあります。
まず前提としまして、下記のようなテーブル構成になっています。
------------------------------------------------------------------
[ user テーブル ]
| id | name
+----+--------
| 5 | 太郎
[ item テーブル ]
| id | name
+----+--------
| 10 | ペン
| 11 | 消しゴム
[ user_item テーブル ]
| id | user_id | item_id | deleted_at
+----+---------+---------+------------
| 1 | 5 | 10 | NULL
| 2 | 5 | 11 | 2014-01-01
------------------------------------------------------------------
User の持ち物 Item の情報を格納しているのが UserItem テーブルです。
User Entity では下記のアノテーションで、Item を join しています。
/**
* @ORM\ManyToMany(targetEntity="Item")
* @ORM\JoinTable(
* name="user_item",
* joinColumns = { @ORM\JoinColumn(name="user_id", referencedColumnName="id") },
* inverseJoinColumns = { @ORM\JoinColumn(name="item_id", referencedColumnName="id") }
* )
*/
protected $items;
通常ですとこれで問題ないのですが、最初に述べた論理削除を使った場合ですと、
SQL クエリに論理削除の処理が加わらず、論理削除したものまですべて取得されてしまいます。
UserItem Entity には @Gedmo\SoftDeleteable(fieldName="deletedAt") を記入しており、
UserItemRepository で UserItem Entity を直接取得する分には論理削除が機能しています。
しかしながら、上述のように join の仲介で使用すると機能しません。
JoinTable の指定でなにか追記しなければならないことなどあるのでしょうか。
原因として考えられることがございましたら、どうかご助言のほどよろしくお願いいたします。
つたない説明で申し訳ありません。
不明瞭なところがありましたら、ご指摘いただければと思います。