2016-09-25 9 views
0

をNULLフィルタを無視して私たちは、重複したレコードを検索するには、次のロジックを使用し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

それはwhereを使用している場合、それは任意のSQLエスケープを行う文句を言わないので、

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

は、注意してください。..今のようなルックス https://github.com/silverstripe/silverstripe-framework/pull/4196/commits/922d02f5356d5904debaf10003477cdd00306192

から4.0のために固定されます。ここではうまくいっていますが、ユーザーデータを渡すときは常にfilterを使用してください。

関連する問題