2013-12-26 3 views
0

Моя схема базы данных;Doctrine2 Entity relationship with Where Условие

LIKE  PAGE ARTICLE  
id  id  id 
userid name text 
itemid 
itemtype 

и мои сущности;

Page.php;

/** 
* @ORM\OneToMany(targetEntity="Like", mappedBy="page") 
*/ 
protected $likes; 

Артикул.php;

/** 
* @ORM\OneToMany(targetEntity="Like", mappedBy="article") 
*/ 
protected $likes; 

Like.php;

/** 
* @ORM\ManyToOne(targetEntity="Page", inversedBy="likes") 
* @ORM\JoinColumn(name="itemid", referencedColumnName="id") 
*/ 
protected $page; 

/** 
* @ORM\ManyToOne(targetEntity="Article", inversedBy="likes") 
* @ORM\JoinColumn(name="itemid", referencedColumnName="id") 
*/ 
protected $article; 

Мой вопрос; Как добавить условие WHERE?

Нравится это;

@ORM\JoinColumn(name="itemid", referencedColumnName="id", condition="itemtype=1") 

Возможно ли это?

ответ

0

Даже если это возможно, вы сделаете это неправильно. Лучше иметь article_id и page_id в таблице Like, чем ваша item_id и itemtype идентификатор.

Пример: Если вы сделаете это, как я сказал выше, вы сможете установить удаление каскада на уровне DB @ORM\JoinColumn(...., onDelete="CASCADE"). Это означает, что если статья была удалена, все пользователи будут автоматически удалены через внешний ключ.

Если вы делаете это по-своему, вам придется вручную позаботиться об этом. Лучше оставить его в базе данных; меньше кода, меньше вероятность ошибки.

+0

Если я использую этот путь, поле (article_id или page_id) будет пустым. Ненужное поле сложен. – user2993220

+0

Это небольшая проблема, у вас будет больше проблем, если вы поместите идентификаторы. Я использую этот трюк для пользователя, изображения, альбома, комментария, wallpost ... Нет разницы в скорости, если это 500 000 строк или 10. – Zeljko

Смежные вопросы