2010-01-20 1 views
5

Я использую Symfony с Доктриной.Как узнать, существует ли объект из отношения в базе данных

У меня есть два класса, определенные, Person и Студента, отношение один к одному.

Каждого студента связан с Person, но не каждый Person имеет отношение с Студентом.

Когда я звоню ...

$person->getStudent(); 

... Я всегда получаю и объект, независимо от некоторых Person «s не имеет студента. Как я могу знать, что это не (Студент) есть в базе данных?

Спасибо.

ответ

9

Я думаю

$person->getStudent()->exists(); 

должны это сделать. По крайней мере, согласно Doctrine API documentation.
Объект, который вы получаете, вероятно, является некоторой записью Null.

+0

@Felix спасибо! Но было бы лучше, если бы он вернул «нуль», когда запись не существует, не так ли? Спасибо за вашу помощь. – kiewic

+0

@Kiewic: Да, у меня также были проблемы с этим и ожидалось значение «null» вместо объекта. Если вы найдете ответ полезным, примите его. –

2

Существует довольно новый метод (я думаю, начиная с Doctrine 1.2): $person->hasReference("Student"); возвращает логическое значение для того, есть ли на самом деле ученик, связанный с человеком, независимо от того, был он сохранен уже или нет в базе данных новый студенческий рекорд. Этот вызов может быть подходящим в ситуациях, когда логика приложения не заботится о сохранении связанного объекта, например. в то время как внутри транзакции (я думаю). Надежда, что помогает немного, приветствий, РАФАЭЛЬ

2

Вы также можете использовать Doctrine_Record::relatedExists(), который является своего рода дополнением к hasReference()

Вы можете использовать его как это:

if ($person->relatedExists('Student')) 
+0

Да, использование '$ person-> relatedExists ('Student')' намного лучше, чем выполнение '$ person-> Student-> exists();' поскольку последний фактически создаст новый «пустой» объект в памяти , прикрепите его к '$ person 'и вставьте его как пустую строку, когда/если вы вызываете' $ person-> save(); ' – Julien

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