Вы можете добиться того, чего хотите, используя пользовательскую функцию :
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-запрос будет работать!
Схема
Схема:
Python:
Lua
, я люблю программировать в Lua, но здесь - то, что записывает меня:
, Несмотря на весь из которого я настою, что Lua является неправдоподобно большим :-)
C#
большинство моих схватываний имеет отношение к предположению, что конвенции C++ были автоматически лучшим выбором для C#
Премия один для .NET (не конкретный C#)
.NET платформа (библиотеки)
MessageBoxButton
должен быть MessageBox.Button
) Rect
, Point
) System
пространство имен Object.Equals
, Object.ReferenceEquals
, operator ==
, operator !=
, IComparable.CompareTo() == 0
) И еще один:
C# (хорошо, часть его является VisualStudio IDE, я предполагаю):
Class<D>
не может использоваться вместо Class<B>
даже при том, что тип D
происходит от Графических дизайнеров типа B
. Мог быть другой список, если Вы спрашиваете меня снова завтра. Даже при том, что ковариантность и проблема разработчика будут в моих лучших 5, пока они не будут решены (с различием, добавленным к C# 4.0, это, кажется, произошло для по крайней мере одного из них...).
Сам
Emacs Lisp
[1], Конечно, одна из красивых вещей о Lisp - то, что не трудно починить эти вещи в Вашем собственном коде с остротой. Тем не менее это раздражает меня, что это не встроено.
Хороший вопрос; я немного смущен, что я не мог придумать лучшие вещи ненавидеть, но честно, Ваша честь, нет очень для ненависти.
Perl представляет неприятный язык.
C является моим фаворитом, но это также ужасно.
PHP
Исключая:
необходимо ввести:
<?php
if($x == NULL)
{
?>
<p><?= $x . ' is null' ?></p>
<?php
}
?>
(не уверенный, почему ТАК изменил № 5 на № 1 снова, но безотносительно)
Python.
, Хотя странный путь Python имеет дело с объемом, был упомянут, худшее последствие его, я чувствую, то, что это допустимо:
import random
def myFunction():
if random.choice(True, False):
myString = "blah blah blah"
print myString
таким образом, в, если блок является тем же объемом как остальная часть функции, означая, что объявление переменной может произойти внутри condional ответвления и быть получено доступ за пределами них. Большинство языков или предотвратит Вас делающий это или по крайней мере предложит Вам некоторый строгий режим.
Эта функция будет иногда успешно выполняться и иногда выдавать исключение. Хотя это - изобретенный пример, это могло привести к некоторым тонким проблемам.
C#
Это - большой язык, особенно с LINQ, но поддержка дженериков плоха по сравнению с C++. Это имело такой потенциал, но текущая реализация только полезна для наборов со строгим контролем типов и подобных тривиальных вещей. Некоторые примеры того, где это падает:
static T Parse(string s)
часто пригождалось бы. (TheRealType)(object)value
IList<string>
не может быть преобразована в IList<object>
, даже при том, что string[]
может быть преобразован в object[]
. (Microsoft могла бы фиксировать это в C# 4.0, все же.) Lua:
global
ключевое слово, не наоборот. if (type(var) == "string") then stuff() end
боль. PHP:
$function($arg);
, но это не рассчитывает. C/C++:
я люблю этот язык, но существует некоторые вещи, которые прослушивают меня в течение многих лет!
C#
мне жаль, что я не мог switch()
ни на каком типе, и что case
могло быть любое выражение.
не Может использовать объектный синтаксис инициализатора с полями 'только для чтения' / private set
автоопоры. Обычно я хочу справку языка с созданием неизменных типов.
Использование {}
для [1 120] метод класса и пространства имен и и блоки свойства/индексатора и составные блоки и инициализаторы массива . Мешает выяснять, где Вы - когда они далеко друг от друга или не соответствовавшие.
я очень не хочу писать (from x in y ... select).Z()
. Я не хочу должным быть отступать к синтаксису вызова метода, потому что синтаксис запроса пропускает что-то.
я хочу do
пункт на синтаксисе запроса, который похож foreach
. Но это не действительно запрос затем.
я действительно достигаю здесь. Я думаю, что C# является фантастическим, и трудно найти много, это повреждается.
Ruby:
C:
Lisp:
R (R-проект для статистики)
JavaScript;
C++:
Java:
D
array.length += 512;
строковые литералы, найденные, как в литерале ассоциативного массива, интерпретируются как статичные, таким образом это
char[][char[]] hash = ["hello":"world","goodbye":"angels"];
не работает без некоторого дополнительного кастинга из-за различных строковых литералов длины несмотря на
a. Я не попросил, чтобы это было интерпретировано как статические массивы
, b. статические массивы не позволяются в ассоциативных массивах так или иначе
, Кто-то проверяет меня на них; не уверенный, если они все все еще релевантны.
DUAL
таблица.
не Может GROUP BY
псевдоним.
я никогда не могу помнить синтаксис за аналитические функции и таким образом, я забываю / слишком ленивый для использования их.
Отсутствие объединенных LIKE
и IN
условный оператор. (После того, как 10 г там REGEX_LIKE
оператор, который мог добиться цели, все же.)
Неловкий синтаксис конкатенации.
SQL не является действительно моим любимым языком, но это - один из лучших трех, которые я каждый день использую. Существует, вероятно, больше объектов, но они - те наверху моего ума.
у меня есть целое, убил проблем с SQL*PLUS
. Я записал замену Perl, которая делает то, что я хотел бы из командной строки, и я использую sql.el
в Emacs
для интерактивного SQL
сессии. Эти инструменты помогают мне работать вокруг моего SQL*PLUS
проблемы.
Разговор который:
"Только [1 111] могут проанализировать Perl". (Но это - главным образом проблема в подсветке синтаксиса, которая я не предпочитаю использовать много больше для любого языка.)
я иногда удивляюсь "простым (но иногда удивляющий) правило...: Это похоже на функцию, поэтому это - функция, и приоритет не имеет значения". (От [1 112])
Разыменовывающие сложные структуры данных могут время от времени сбивать с толку. Я не могу решить, является ли это истинным дефектом в Perl или просто последствии наличия действительно мощных средств структуры данных. Так или иначе я могу обычно разбираться в нем путем взятия нескольких минут для размышления о том, что я делаю.
опция No заставить системные вызовы повышать свои ошибки как модуль DBI. (Благодаря brian d foy, я теперь знаю autodie
, модуль на CPAN делает это, но я хотел бы его встроенный.)
Предупреждения и резкая критика, не включенная по умолчанию в сценариях. (-e
опция выключила бы их для использования командной строки.)
Снова, там обязаны быть большим количеством вещей, но это проблемы, которые я недавно заметил. Я добавил бы потребность в [1 115] и =back
и изворотливое L<...>
синтаксис в [1 118], но возможно который должен быть отдельным списком.
Теперь для триады:
, Получающий файл с аргументами, заменяет значения аргументов родительского сценария. (Выполнение . file arg1
помещает arg1
в [1 121].)
ksh
не идеальная интерактивная оболочка и значения по умолчанию к [1 123] привязки клавиш, а не emacs
. (Мое решение состоит в том, чтобы использовать bash
для интерактивных оболочек.)
утилиты Common (такой как [1 126]) реализованы по-другому через различные платформы, таким образом, предотвращающие идеальную мобильность. Некоторые полезные команды должны быть установлены на некоторых платформах и являются частью ядра ОС на других.
синтаксис для условных выражений чрезмерно тяжел. (if [ ... ]; then ... fi
)
, Хотя это полно по Тьюрингу, Вы в конечном счете собираетесь хотеть переместиться до более выразительного языка как Perl.
Одно решение для № 4 состоит в том, чтобы привыкнуть для срывания оценки:
[ ... ] && ...
Python
Битовые поля C
Редактирование: При размышлении о CPAN для C я думал..., что будет я называть такую вещь, и мысль "ccan" и поиск с помощью Google его, я столкнулся с этим: http://ccan.ozlabs.org/
Это, кажется, находится пока еще в его младенчестве все же.
Perl
я люблю этот язык, и я не хочу добавлять вещи, которые уже использовались, но никто еще не упомянул это, таким образом, я брошу его на горшок. Когда я использовал эту функцию, я нашел, что это было самым ужасным опытом моей жизни (и я работал в ассемблере):
write()
и format()
функции. у Них есть единственный худший, самый ужасный, самый ужасающий вообразимый синтаксис, и все же им не удается дать Вам любой [еще 113] функциональность, чем Вы могли уже достигнуть с некоторыми (бесконечно более симпатичный) printf()
работа. Никто не должен никогда попытка использовать те две функции, чтобы сделать любой вывод, просто из-за того, как плохо они.
я уверен, что кто-то не согласится, но когда я изучил их, надеясь, что они решат мою проблему, я нашел, что они были "миром боли" (чтобы заключить Большого Лебовски в кавычки) и надеяться, что Perl6 или покончил с ними или, лучше, полностью переписал их, чтобы быть несколько более применимым и полезным.
Я рискую, так как я не могу действительно использовать его полный рабочий день, но я попробую так или иначе!
Perl 6
первые три являются языком; остальные не действительно сам язык, но то, что он еще не отсутствует.
C#