我需要在我的select语句中使用这个条件:
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':
如何克服此错误?
答案 0 :(得分:0)
*ngFor
$query->where('YEAR(date) = YEAR(CURDATE())');
允许任意SQL:
where()方法允许添加任意SQL作为条件片段。 $ snippet可能包含任何合法的SQL片段,如果它具有可变内容,则必须使用命名占位符添加它。 $ args数组是一个占位符和值的数组,将替换为代码段。由开发人员确保该代码段是有效的SQL。没有对代码段进行特定于数据库的修改。
答案 1 :(得分:0)
嗯,您也可以使用db_query,它允许您“不使用Drupal”编写SQL查询。 我的意思是,您将能够添加自定义WHERE语句或任何SQL适当的函数,如自定义函数;)
例如
String usernameField = this.getConfiguredUsernameParameter(); // app_username
String passwordField = this.getConfiguredPasswordParameter(); // app_password
UserDetails userDetails = this.registeredUserDetailsImplementation.loadUserByUsername(request.getParameter(usernameField));
String passwordHash = userDetails.getPassword();
String rawPassword = request.getParameter(passwordField);
String salt = this.getConfiguredSalt(); // can be null
if (this.configuredPasswordEncoder.isPasswordValid(passwordHash, rawPassword, salt) {
return true;
}
return false;
答案 2 :(得分:0)
使用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);