2010-01-20 107 views
5

我正在使用Symfony与Doctrine。如何知道关系中的对象是否存在于数据库中

我定义了两个班,学生,关系一一对应的。

每个学生关系到一个人,但不是每个人具有学生的关系。

当我打电话......

$person->getStudent(); 

......我总是和对象,无论一些人的没有一个学生。我怎么知道它不存在(数据库中存在学生)?

谢谢。

回答

9

我觉得

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

应该这样做。至少根据Doctrine API documentation
你得到的对象可能是某种空记录。

+0

@Felix的感谢!但是,如果记录不存在时返回'null'会更好吗?不是吗?谢谢你的帮助。 – kiewic 2010-01-20 15:01:18

+0

@Kiewic:是的,我也有这个问题,并期望一个'null'值而不是一个对象。如果您发现有用的答案,请接受它。 – 2010-01-20 15:42:18

2

有一个很新的方法(我认为自从Doctrine 1.2以来):$person->hasReference("Student");返回一个布尔值,以确定是否实际存在一个与该人相关联的学生,不管它是否已经保存在数据库中,并且根据需要而不创建新的学生记录。 这个调用可以适用于应用程序逻辑不关心相关对象的持久性的情况,例如,而在一个交易(我猜)。 希望有点帮助,欢呼声,RAPHAEL

2

您还可以使用Doctrine_Record::relatedExists(),这是怎样的一个补充,以hasReference()

你使用这样的:

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

是的,使用'$ person-> relatedExists('Student')'方法比'$ person-> Student-> exists();好得多,因为后者实际上会在内存中创建一个新的“空白”对象,如果你调用'$ person-> save();'将其附加到'$ person',并在/如果你调用'$ person-> save – Julien 2017-01-20 11:36:37

相关问题