我在一个字符串类型的实体中有一个字段,我需要在我的dql中将订单结果赋值为整数
我在字符串类型的实体中有一个字段,我需要按该字段排序但以整数转换的结果。
有些像这样(MySQL查询):
function loadAudio(url) {
return new Promise((resolve, reject) => {
var audio = new Audio();
audio.oncanplaythrough = () => resolve(audio);
audio.onerror = reject;
audio.src = url;
});
}
$("#file").change(function(e){
var files = e.currentTarget.files;
var length = songs.length;
Promise.all(Array.from(files).map(file => loadAudio(URL.createObjectURL(file))))
.then(audios => {
console.log("Audio elements: ", audios)
});
});
如何在学说中创建此查询?
更新
由于这篇文章,我设法使用强制转换功能:
CASTING attributes for Ordering on a Doctrine2 DQL Query
我已创建自己的功能来实现此功能。
学说中的官方文件:
答案 0 :(得分:2)
AFAIK你不能直接这样做。 Doctrine不支持本机mysql函数(转换,日,月等)。 Idea od教义是能够与许多不同的数据库交谈 - 这就是为什么没有任何本机功能。
<强>但强>
你可以自己做。
几年前我需要在学说中使用数据函数(日/月等),所以我设法将它添加到学说中。
看这里:
https://github.com/poznet/SF2Core/blob/master/src/Poznet/CoreBundle/Dql/Year.php 要么 https://github.com/beberlei/DoctrineExtensions
看到过转换的解决方案,但从未测试过,请看这里
答案 1 :(得分:1)
<?php
class ConvertUsing extends FunctionNode
{
public $field;
public $using;
public $charset;
/**
* @override
*/
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return sprintf('CONVERT(%s USING %s)',
$sqlWalker->walkArithmeticPrimary($this->field),
//$sqlWalker->walkSimpleArithmeticExpression($this->using), // or remove USING and uncomment this
$sqlWalker->walkSimpleArithmeticExpression($this->charset)
);
}
/**
* @override
*/
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->field = $parser->ArithmeticPrimary();
// adopt use bypass validate variable of parse by using AliasResultVariable ...!!
$this->using = $parser->AliasResultVariable();
$this->charset = $parser->AliasResultVariable();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
答案 2 :(得分:0)
如果您只想对查询进行排序,即使代码是这样的字符串,也可以对代码进行排序。
SELECT * FROM table1 ORDER BY code ASC; <- for ascending
SELECT * FROM table1 ORDER BY code DESC; <- for descending
如果要将其转换为整数,请尝试使用
SELECT * FROM table1 ORDER BY (SELECT CONVERT(int, code));
只需确保您的代码都是数字,这样您就不会收到错误消息。 我希望它有所帮助。