Doctrine findBy魔术方法中的NULL值

7
我想知道是否有办法使用Doctrine的魔术方法查找空值。例如:
Doctrine::getTable('myClass')->findByDeletedAt(null);

基本上,我想返回所有未被删除的记录。我尝试了上面的方法,但好像不起作用。
有什么想法吗?
4个回答

13

我尝试这个时出现了错误:

可捕获的致命错误:传递给Doctrine\ORM\EntityRepository :: findBy()的第1个参数必须是一个数组,而不是字符串

因此,这对我有用:

$repository->findBy(array('date_field' => null));

1
好的,OP提到了Doctrine 1,而您正在使用Doctrine 2,所以这个错误是“正常的”。 - j0k
1
我看到了>问于2010年10月5日23:45<,有点晚了,不过问题仍然是最新的!:-D - Daniel W.

2

实际上,我觉得我试图过于花哨了。可以像这样完成:

Doctrine::getTable('myClass')->findBy('deleted_at',null);

1

我知道这篇文章比较老,但是提供的解决方案对于 Doctrine 1.2.x 并不正确。

当你使用以下函数时:

Doctrine::getTable('YourClass')->findByDeleted_at(null); //he want to get NOT DELETED rows!

Doctrine抛出一个错误:“您必须指定findBy的值”,因为null被视为未传递的值;
-> findBy('deleted_at',null)也会引发异常。
-> findBy('deleted_at','NULL')也不正确,因为它被翻译成SQL: ... WHERE deleted_at ='NULL'
这种查询的SQL语法应该是:
... WHERE deleted_at IS NULL;

所以解决方案是使用->findBySql()方法:
Doctrine::getTable('YourClass')->findBySql('deleted_at IS NULL', array());

* 第三个参数可以是水合模式。

希望这能帮助到某些人...


0

我知道这是老问题,但你的第一次尝试是错误的。对于一个名为 'deleted_at' 的字段,你应该这样做:

Doctrine::getTable('YourClass')->findByDeleted_at($val);

注意我只大写了字段“deleted_at”的第一个字母。


2
我认为这不对,伙计——它将整个字符串都转换成了驼峰式。 - Burgi
不需要使用驼峰命名法 - regomodo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接