2015-05-13 2 views
3

У меня эти сущности на моем коде.Doctrine SoftDelete OneToOne Отношения

class Review extends BaseEntity { 

    /** @ORM\OneToOne(targetEntity="Action", mappedBy="review") */ 
    protected $action; 
} 


class Action extends BaseEntity { 

    /** @ORM\OneToOne(targetEntity="Review", inversedBy="action") */ 
    protected $review; 
} 

Как вы можете видеть, это отношения OneToOne между действиями и обзором. Моя проблема заключается в том, что я использую soft-delete для своих объектов, поэтому, когда я удаляю сущность, на самом деле не удаляется, устанавливается только дата удаления. Позже в контрольном журнале мне нужно показать удаленные отзывы, и, конечно же, мне нужна информация от родительского действия. Мой вопрос: мне нужно сделать это отношение OneToMany? или есть лучший подход?

+0

Я думаю, что я не совсем понял ваш вопрос, что отношения с OneToMany или OneToOne связаны с мягким удалением? Какова фактическая проблема между тем или иным? Определение типа отношения зависит от того, что вы хотите сделать с этими объектами и ** NOT MUCH ** с поведением. – Azteca

+0

фактически. Если вы мягко удаляете отношения OneToOne, сторона-владелец все равно сохранит ссылку на удаленный объект, и если вы не замените/не удалите/не очистите этот объект, вы не сможете быть привязаны к новому. Но если вы это сделаете, вы потеряете ссылку на объект владельца и позже не сможете регистрировать изменения. – richardalberto

+0

О, я вижу, то, что я знаю (не так много), вы можете сделать это так ** ** ** предложил, используйте отношения _OneToMany_ и проверяйте, сохраняете ли вы только один, а остальные мягко удалены, так что вы можете история для любого прослушивания. Я попытаюсь опубликовать ответ на проверку. – Azteca

ответ

0

Чтобы быть честным, я не очень хорошо знаю поведение мягкого удаления. Что вам нужно знать, так это то, что мягкое удаление объекта является сильным компромиссом в реляционной базе данных.

Возможно, вы захотите рассмотреть в этом конкретном случае подход к поиску событий. Я бы рекомендовал хранить информацию об удалении и (мягком) удаленном объекте в базе данных на основе документа.

Любой другой подход (например, OneToMany) по-прежнему прекрасен, но имейте в виду, что риск здесь ухудшает ваши отношения, вводя некогерентные отношения.

Это, как говорится, я полностью осознаю, что в реальной жизни это совсем не так, как теория :) Удачи.

С уважением.

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