我们有一个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”。
关于为什么会这样做/正在发生什么的任何想法?
答案 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
。