Silverstripe在get命令中忽略NULL过滤器

时间:2016-09-25 22:43:21

标签: php silverstripe

我们有一个Silverstripe项目,它使用以下逻辑来查找重复记录:

if ($queryString) {
  $duplicate = SavedSearch::get()->filter(array(
    'RentOrBuy' => $rentOrBuy,
    'MemberID' => $member->ID,
    'QueryString' => $queryString, 
       ))->first();
} else {
  $duplicate = SavedSearch::get()->filter(array(
    'RentOrBuy' => $rentOrBuy,
    'MemberID' => $member->ID,
    'QueryString' => NULL, 
       ))->first();
}

然而,这并未返回预期的回复。当$ queryString为NULL时,它不返回任何对象 - 即使QueryString在数据库中的匹配字段上设置为“NULL”。

关于为什么会这样做/正在发生什么的任何想法?

1 个答案:

答案 0 :(得分:2)

从外观上看它固定为4.0 https://github.com/silverstripe/silverstripe-framework/pull/4196/commits/922d02f5356d5904debaf10003477cdd00306192

所以现在..

p {
hyphens: manual !important;
}

使用if ($queryString) { $duplicate = SavedSearch::get()->filter(array( 'RentOrBuy' => $rentOrBuy, 'MemberID' => $member->ID, 'QueryString' => $queryString, )) ->first(); } else { $duplicate = SavedSearch::get()->filter(array( 'RentOrBuy' => $rentOrBuy, 'MemberID' => $member->ID )) ->where('QueryString IS NULL') ->first(); } 时要小心,因为它不会执行任何sql转义。这很好,但在传递用户数据时总是使用where