Модификатор Java volatile является примером специального механизма, гарантирующего связь между потоками. Когда один поток записывает в изменчивую переменную, а другой поток видит, что пишет, первый поток сообщает второй обо всем содержимом памяти до тех пор, пока он не выполнит запись в эту изменчивую переменную.
Атомные операции выполняются в одной единице задачи без помех от других операций. Атомные операции необходимы в многопоточной среде, чтобы избежать несогласованности данных.
Вы можете добиться того, чего хотите, используя пользовательскую функцию :
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\SqlWalker;
use Doctrine\ORM\Query\Parser;
class DateFunction extends FunctionNode
{
private $arg;
public function getSql(SqlWalker $sqlWalker)
{
return sprintf('DATE(%s)', $this->arg->dispatch($sqlWalker));
}
public function parse(Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->arg = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
Затем зарегистрируйте эту функцию в своем коде:
$em->getConfiguration()->addCustomDatetimeFunction('DATE', 'DateFunction');
И ваш DQL-запрос будет работать!