cakephp: как я могу установить параметры полей, такие как «только поля, не являющиеся нулевыми»

#cakephp #find #field

#cakephp #Найти #поле

Вопрос:

есть ли опция в методе поиска cake, где я могу сказать «дайте мне только поля, которые не являются нулевыми»? Я не хочу ставить это условие отдельно для каждого поля в массиве условий, лучше установить это в качестве опции в массиве полей, подобном этому.

 $this->find('first',array(
      'fields' => array("not" => null)
));
  

Или даже исключить подобные поля.

  $this->find('first' array(
      'fields' => array('not' => array('id','created','modified'))
  

));

Спасибо, Гвидо

Ответ №1:

Это должно быть условием (почему это проблема как условие?).

Но вы можете поместить это в beforeFind() метод, поэтому вам не нужно добавлять условие к каждому запросу. Включение его в beforeFind() приведет к тому, что условие будет добавляться к каждому запросу до того, как он фактически выполнит поиск. Звучит так, как я предполагаю, вы действительно хотите, поскольку «но не как условие» на самом деле не дает особых аргументов, почему этого не может быть.

Комментарии:

1. Привет, Дэйв, спасибо. я думаю, я нашел решение для фильтрации нулевых полей. Но не в параметре полей я нашел статический метод Set::filter. Итак, я могу фильтровать свои данные следующим образом: $this-> set(Set::filter($this-> SomeModel-> find(‘first’)));

2. У меня проблема с настройкой условия y, потому что поля должны быть установлены несколькими hasOne и имеют много объединений в заголовке класса. В таблицах много столбцов, и было бы проще (даже когда это возможно :)) сказать «вообще никаких нулевых полей» или перечислить поля типа «id, созданные и измененные», которые я не хочу читать.

3. Конечно, я могу использовать условия, но было бы неплохо установить этот параметр другим способом, даже если это возможно. Большое вам спасибо 😉

4. То, что вы указали в качестве опции, просто удаляет пустые элементы из массива после того, как вы уже выполнили find() . Если это то, что вы надеялись сделать, вам ДЕЙСТВИТЕЛЬНО следовало уточнить в своем вопросе.