Вернуть значения int вместо строк в результате необработанного запроса в Doctrine - PullRequest
0 голосов
/ 20 февраля 2020

Я бы хотел получить данные со сложным 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. Буду благодарен за помощь.

...