emptyValue を正しく理解しているかどうかはわかりません。設定されている言語でユーザーをフィルタリングする機能が必要ですが、一部のユーザーはまだ言語を設定していないため、NULL になっています。コードは次のとおりです。
// Model
public $filterArgs = array(
'locale' => array('type' => 'value', 'field' => 'Profile.locale', 'allowEmpty' => true),
);
// Controller
public $presetVars = array(
'locale' => array('type' => 'value', 'allowEmpty' => true, 'emptyValue' => '0')
);
DB では、Profile.locale フィールドを NULL にすることができ、デフォルト値は NULL です。今ビュー:
<?php echo $this->Form->select('locale', am(array('0' => __('Not set')), Configure::read('User.locales'))); ?>
それは私に適切なHTMLを与えます:
<select name="data[User][locale]" class="input-small" id="UserLocale">
<option value=""></option>
<option value="0">Not set</option>
<option value="eng">English</option>
<option value="deu">Deutsch</option>
<option value="pol">Polski</option>
</select>
しかし、検索して [未設定] を選択しようとすると、ロケール パラメータが URL に表示されません。また?locale=0
、URL を手で入力すると、クエリでWHERE 'Profile'.'locale' = '0'
はなく取得されますWHERE 'Profile'.'locale' IS NULL
。
CakeDC Search の現在の開発者ブランチと CakePHP 2.4.6 を使用しています。