Простой запрос в Symfony возвращает ноль - PullRequest
0 голосов
/ 03 января 2019

Мне нужно взять самую высокую температуру из моего считывающего стола.Я пытаюсь преобразовать этот SQL-запрос для использования с createQueryBuilder()

SQL: SELECT temperature_value FROM read_outs WHERE room_id = 3

И эта работа в PHPMyAdmin и я получаю результат.Теперь я хочу получить только максимальное значение из всех результатов.

Я создаю функцию в хранилище:

public function getMaxTemperatureByRoom($id)
{
    $this->createQueryBuilder('read_out')
        ->select('read_out, MAX(read_out.temperatureValue) AS 
max_temperature')
        ->where('read_out.roomId = :id')
        ->setParameter('id', $id)
        ->getQuery()
        ->getResult();
}

Это мой класс сущности:

 <?php

   namespace Smart\SensorBundle\Entity;

   use Doctrine\ORM\Mapping as ORM;
   use Smart\RoomBundle\Entity\Room;



/**
    * Class ReadOut
    * @package Smart\SensorBundle\Entity
    *
    * @ORM\Table(name="read_outs")
* 

@ORM\Entity(repositoryClass=
"Smart\SensorBundle\Repository\ReadOutReposi    tory")
 */
class ReadOut
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var Sensor
 *
 * @ORM\ManyToOne(targetEntity="Smart\SensorBundle\Entity\Sensor")
 * @ORM\JoinColumn(name="sensor_id", referencedColumnName="id", 
onDelete="CASCADE")
 */
private $sensor_id;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="read_date", type="date")
 */
private $readOutDate;

/**
 * @var float
 *
 * @ORM\Column(name="temperature_value", type="float")
 */
private $temperatureValue;

/**
 * @var float
 *
 * @ORM\Column(name="humidity_value", type="float")
 */
private $humidityValue;

/**
 * @var Room
 *
 * @ORM\ManyToOne(targetEntity="Smart\RoomBundle\Entity\Room")
 * @ORM\JoinColumn(name="room_id", referencedColumnName="id", 
onDelete="CASCADE")
 */
private $roomId;

/**
 * @return int
 */
public function getId(): int
{
    return $this->id;
}

/**
 * @param int $id
 */
public function setId(int $id): void
{
    $this->id = $id;
}

/**
 * @return Sensor
 */
public function getSensorId(): Sensor
{
    return $this->sensor_id;
}

/**
 * @param Sensor $sensor_id
 */
public function setSensorId(Sensor $sensor_id): void
{
    $this->sensor_id = $sensor_id;
}

/**
 * @return \DateTime
 */
public function getReadOutDate(): \DateTime
{
    return $this->readOutDate;
}

/**
 * @param \DateTime $readOutDate
 */
public function setReadOutDate(\DateTime $readOutDate): void
{
    $this->readOutDate = $readOutDate;
}

/**
 * @return float
 */
public function getTemperatureValue(): float
{
    return $this->temperatureValue;
}

/**
 * @param float $temperatureValue
 */
public function setTemperatureValue(float $temperatureValue): void
{
    $this->temperatureValue = $temperatureValue;
}

/**
 * @return float
 */
public function getHumidityValue(): float
{
    return $this->humidityValue;
}

/**
 * @param float $humidityValue
 */
public function setHumidityValue(float $humidityValue): void
{
    $this->humidityValue = $humidityValue;
}

/**
 * @return Room
 */
public function getRoomId(): Room
{
    return $this->roomId;
}

/**
 * @param Room $roomId
 */
public function setRoomId(Room $roomId): void
{
    $this->roomId = $roomId;
}
}

В этом я получаю NULL:

$result = $this->getDoctrine()->getRepository(ReadOut::class)- 
>getMaxTemperatureByRoom(3);
    var_dump($result);die;

Что я делаю не так?

Спасибо.

@ EDIT

Теперь я получаю что-то вроде этого:

array(2) { [0]=> object(Smart\SensorBundle\Entity\ReadOut)#3563 (6) { ["id":"Smart\SensorBundle\Entity\ReadOut":private]=> int(1) ["sensor_id":"Smart\SensorBundle\Entity\ReadOut":private]=> object(Proxies\__CG__\Smart\SensorBundle\Entity\Sensor)#6017 (14) { ["__initializer__"]=> object(Closure)#3555 (3) { ["static"]=> array(3) { ["entityPersister"]=> object(Doctrine\ORM\Persisters\Entity\BasicEntityPersister)#3529 (13) { ["class":protected]=> object(Doctrine\ORM\Mapping\ClassMetadata)#3524 (40) { ["name"]=> string(32) "Smart\SensorBundle\Entity\Sensor" ["namespace"]=> string(25) "Smart\SensorBundle\Entity" ["rootEntityName"]=> string(32) "Smart\SensorBundle\Entity\Sensor" ["customGeneratorDefinition"]=> NULL ["customRepositoryClassName"]=> string(46) "Smart\SensorBundle\Repository\SensorRepository" ["isMappedSuperclass"]=> bool(false) ["isEmbeddedClass"]=> bool(false) ["parentClasses"]=> array(0) { } ["subClasses"]=> array(0) { } ["embeddedClasses"]=> array(0) { } ["namedQueries"]=> array(0) { } ["namedNativeQueries"]=> array(0) { } ["sqlResultSetMappings"]=> array(0) { } ["identifier"]=> array(1) { [0]=> string(2) "id" } 

Нет конечного результата :(.

@ EDIT2

Это была проблема с var_dump, когда я использовал dump, я получил правильный ответ.

Спасибо за помощь.

1 Ответ

0 голосов
/ 03 января 2019

Вы забыли ответное заявление:

public function getMaxTemperatureByRoom($id)
{
    return $this->createQueryBuilder('read_out')
        ->select('read_out, MAX(read_out.temperatureValue) AS max_temperature')
        ->where('read_out.roomId = :id')
        ->setParameter('id', $id)
        ->getQuery()
        ->getResult()
    ;
}
...