CakePHP 3.x: Запрос на исключение записей, в которых поле может быть либо NULL, либо пустым ('')

1

Я использую Cakephp 3 и пытаюсь получить некоторые строки/записи из таблицы с полем как непустым.

Например:-

У меня есть таблица areas с полем Area_block. Мне нужно получить записи для тех строк, которые имеют что-то внутри Area_block. Простыми словами, мне не нужны пустые или NULL строки Area_block.

Area_block не является полем NULL. Таким образом, он остается пустым/незаполненным.

я пытался

$conditions = ['Area_Block IS NOT NULL'];
$conditions = ['NOT' => array('Area_Block' => '')];
$conditions = ['Area_Block <>' => ''];
$conditions = ['Area_Block !=' => ''];

но ничего не работает !!

Моя среда включает сервер MSSQL 2008 и PHP 5.6 на apache.

Пожалуйста помоги !!

Теги:
sql-server-2008
cakephp
cakephp-3.0

2 ответа

5
Лучший ответ

Я понимаю, что в вашей таблице хранятся записи с Area_Block установленными как NULL и '' (пустая строка).

Попробуйте следующее:

$conditions = [['Area_Block IS NOT' => null], ['Area_Block IS NOT' => '']];

Это также должно работать:

$conditions = ['Area_Block IS NOT' => [null,'']]; //haven't tested it

Однако, чтобы уменьшить сложность, в базе данных вы можете установить для поля Area_Block по умолчанию Area_Block NULL, или по умолчанию - '' и запретить полю принимать значения NULL.

Работа с исключительными значениями NOT NULL может быть проще. Если вы измените таблицу, чтобы отразить это, вам нужно будет только для проверки '' значений:

$conditions = ['Area_Block IS NOT' => ''];

См. Автоматическое создание NOT NOT NUML в Поваренной книге 3.x.

  • 0
    Спасибо @Inigo. Это сработало без нареканий. Почему я написал 'Area_Block IS NOT NULL' . Я должен был попробовать больше. ;)
  • 0
    Не волнуйтесь :) Работать с NOT NULL всегда было сложно с CakePHP
Показать ещё 3 комментария
0

Я думаю, что решение, предоставленное @InigoFlores, работало в некоторой степени, но не удалось выполнить некоторые записи.

Вот что я сделал, чтобы он работал отлично.

$conditions = ['DATALENGTH(Area_Block) >' => 0];

Надеюсь, это поможет кому-то.

  • 0
    Я заметил, что не правильно прочитал ваш вопрос, в частности, когда вы упомянули, что в поле по умолчанию установлено значение "" (я предполагаю, что это строка). К сожалению, решение, которое вы предоставляете, не совместимо с MySQL. Кроме того, предложение по редактированию заголовка вашего вопроса может быть неуместным. Я постараюсь исправить как название вопроса, так и ответ. Спасибо!
  • 0
    Да, вопрос был задан только для MSSQL, поэтому я упоминал MSSQL везде, включая теги. MYSQL может работать для любого решения, о котором я говорил в этом вопросе, кроме второго.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню