Я бы хотел получить данные со сложным sql запросом в Doctrine. Мой sql возвращает несколько идентификаторов в виде строки, которую я хотел бы получить данные в целочисленном формате. Мой код:
public function mainQueue($step, $mailboxes)
{
$rsm = new ResultSetMapping();
$mailboxesIds = implode(',', $mailboxes);
$sql = "SELECT mqe.uid, mqe.mailbox_id as mailbox FROM mail_queue_element mqe
INNER JOIN mail_queue_statuses mqs on mqs.mail_queue_element_id = mqe.id
INNER JOIN mailboxes m ON m.id = mqe.mailbox_id AND mqe.mailbox_id IN (:mailboxes)
INNER JOIN (SELECT min(temp.created_at) as tempmin, max(temp.created_at) as tempmax, mail_queue_element_id
FROM mail_queue_statuses temp INNER JOIN mail_queue_element mqe_temp ON mqe_temp.id = temp.mail_queue_element_id WHERE mqe_temp.mailbox_id IN (:mailboxes) GROUP BY mail_queue_element_id) maxmqe on maxmqe.mail_queue_element_id = mqs.mail_queue_element_id
AND maxmqe.tempmax = mqs.created_at AND mqs.user_id is null
WHERE mqs.mail_incoming_status_id = :status_id ORDER BY mqe.mail_server_date asc LIMIT :offset, :limit";
$conn = $this->getEntityManager()->getConnection();
$query = $conn->prepare($sql);
$query->bindValue(':mailboxes', $mailboxesIds);
$query->bindValue('offset', $step * 10, \PDO::PARAM_INT);
$query->bindValue('limit', 10, \PDO::PARAM_INT);
$query->bindValue('status_id', \Config::get('mailconstants.MAIL_INCOMING_MAIN_QUEUE_STATUS'), \PDO::PARAM_INT);
$query->execute();
var_dump($query->fetchAll());
die;
}
Результат:
array(10) {
[0]=>
array(2) {
["uid"]=>
string(3) "224"
["mailbox"]=>
string(2) "21"
}
[1]=>
array(2) {
["uid"]=>
string(4) "1600"
["mailbox"]=>
string(2) "21"
}
[2]=>
array(2) {
["uid"]=>
string(4) "1601"
["mailbox"]=>
string(2) "21"
}
[3]=>
array(2) {
["uid"]=>
string(4) "1602"
["mailbox"]=>
string(2) "21"
}
[4]=>
array(2) {
["uid"]=>
string(4) "1603"
["mailbox"]=>
string(2) "21"
}
[5]=>
array(2) {
["uid"]=>
string(4) "1604"
["mailbox"]=>
string(2) "21"
}
[6]=>
array(2) {
["uid"]=>
string(4) "1605"
["mailbox"]=>
string(2) "21"
}
[7]=>
array(2) {
["uid"]=>
string(4) "1606"
["mailbox"]=>
string(2) "21"
}
[8]=>
array(2) {
["uid"]=>
string(4) "1607"
["mailbox"]=>
string(2) "21"
}
[9]=>
array(2) {
["uid"]=>
string(4) "1608"
["mailbox"]=>
string(2) "21"
}
}
Как видите, свойства uid и mailbox являются строками. Я sh они были целыми числами. Я видел кое-что о флаге PDO :: ATTR_EMULATE_PREPARES , и я должен установить для него значение false. Но я не знаю, как это сделать, когда я использую Doctrine. Буду благодарен за помощь.