С Symfony и Doctrine у меня есть запрос на соединение, который не работает (OneToOne). Я не понимаю, потому что я привык делать идентичные запросы, и это работает ... Я, должно быть, сделал большую видимую ошибку, но не могу ее найти.
Запрос:
public function findByUuidAndName(string $uuid, string $name)
{
return $this
->createQueryBuilder('userMedia')
->innerJoin('App:Media', 'media', 'WITH', '
userMedia.media = media
')
->andWhere('media.uuid = :uuid')
->andWhere('media.name = :name')
->setParameter('uuid', $uuid)
->setParameter('name', $name)
->select('
userMedia,
media
')
->getQuery()
->getOneOrNullResult()
;
}
Вернуть эту ошибку:
Для запроса было найдено более одного результата, хотя ожидалась одна строка или ни одного.
Я хорошо проверил. Когда я предоставляю uuid
и name
, у меня есть только одна запись в базе данных. Я скопировал выполняемый запрос в PHPMyadmin, и у меня есть только одна строка.
Похоже, что addSelect (userMedia, media) пытается вернуть две строки вместо одной гидратированной (носитель должен быть в userMedia.media)
UserMedia
сущность:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* UserMedia
*
* @ORM\Entity(repositoryClass="App\Repository\UserMediaRepository")
* @ORM\HasLifecycleCallbacks()
*/
class UserMedia
{
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var Media
*
* @ORM\OneToOne(
* targetEntity="App\Entity\Media",
* cascade={"persist"},
* fetch="EAGER"
* )
*/
private $media;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime")
*/
private $createdAt;
/**
* @var User
*
* @ORM\ManyToOne(targetEntity="App\Entity\User")
*/
private $createdBy;
public function getMedia(): ?Media
{
return $this->media;
}
public function setMedia(?Media $media): void
{
$this->media = $media;
}
... (setters & getters)
}
Media
сущность:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\File;
/**
* Media
*
* @ORM\Entity(repositoryClass="App\Repository\MediaRepository")
*/
class Media
{
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var File
*/
private $file;
/**
* @var string
*
* @ORM\Column(type="string", length=36)
*/
private $uuid;
/**
* @var string
*
* @ORM\Column(type="string")
*/
private $name;
/**
* @var string
*
* @ORM\Column(type="string", length=8)
*/
private $extension;
/**
* @var string
*
* @ORM\Column(type="string", length=15)
*/
private $mime;
/**
* @var integer
*
* @ORM\Column(type="integer", options={"unsigned"=true})
*/
private $size;
... (setters & getters)
}