2016-09-25 88 views
0

空筛选我们有使用下面的逻辑来查找重复记录的Silverstripe项目:Silverstripe忽略get命令

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”。

有关为何发生这种事情/发生了什么的任何想法?

回答

2

它固定4.0从长相 https://github.com/silverstripe/silverstripe-framework/pull/4196/commits/922d02f5356d5904debaf10003477cdd00306192

所以现在..

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(); 
} 

使用where的时候,因为它不会做任何SQL逃逸小心。这里很好,但传递用户数据时总是使用filter