Drupal 7 - db_select: функция SQL, в которой условие

Мне нужно использовать это условие в моем операторе выбора:

WHERE YEAR(date) = YEAR(CURDATE()) 

но если я это сделаю, вот так:

$query = db_select('table', 't');
$query->fields('t');
$query->condition('YEAR\(date\)', 'YEAR(CURDATE())', '=');

В Drupal этого не будет (даже если я не избегу этих скобок - он просто их игнорирует), потому что я получаю сообщение об ошибке:

Column not found: 1054 Unknown column 'YEARdate' in 'where clause':

Как побороть эту ошибку?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
1 001
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Хм .. вот так вроде бы:

$query->where('YEAR(date) = YEAR(CURDATE())');

where позволяет использовать произвольный SQL:

The where() method allows for the addition of arbitrary SQL as a conditional fragment. $snippet may contain any legal SQL fragment, and if it has variable content it must be added using a named placeholder. The $args array is an array of placeholders and values that will be substituted into the snippet. It is up to the developer to ensure that the snippet is valid SQL. No database-specific modifications are made to the snippet.

Используйте addExpression, смотрите мой пост

Fky 23.04.2018 16:47

Хм, вы также можете использовать db_query, он позволяет писать SQL-запросы «без Drupal». Я имею в виду, что вы сможете добавлять пользовательские операторы WHERE или любые функции, соответствующие SQL, например пользовательские функции;)

Например.

$result = db_query('SELECT title FROM {node} WHERE type = "%s" AND title LIKE "%%%s%%"', 'type', 'title');

Используйте метод addExpression: https://api.drupal.org/api/drupal/includes!database!select.inc/function/SelectQuery%3A%3AaddExpression/7.x

$query = db_select('table', 't');
$query->fields('t');
$query->addExpression('YEAR(t.date) = YEAR(CURDATE())');
$result = $query->execute()->fetchAll();

var_dump($result);

Другие вопросы по теме