Когда я получаю объект по идентификатору с помощью метода find
, например
$manager->getRepository(Country::class)->find(1);
Данный объект выглядит странно со строковым идентификатором вместо int
Country {#41030 ▼
+__isInitialized__: false
-id: "1"
-name: ""
}
Но когда я получаю ту же страну с findOneBy
$manager->getRepository(Country::class)->findOneBy(['id' => 1]);
Я получаю тот же объект с правильным типом идентификатора
Country {#41030 ▼
+__isInitialized__: true
-id: 1
-name: "France"
}
Если я попробую использовать метод find
с другим объектом, возвращаемый объект будет иметь идентификатор правильного типа.
Я безуспешно пытаюсь найти различия между этими двумя сущностями.
Странный тип возврата возникает, когда я использую метод find
в прослушивателе, который использует диспетчер сущностей LifecycleEventArg
getEntityManager()
.
У тебя уже есть такой случай?
РЕДАКТИРОВАТЬ
Есть определение сущности Country
/**
* @ORM\Table
* @ORM\Entity
* @DoctrineAssert\UniqueEntity("name")
*/
class Country
{
/**
* @var int
*
* @ORM\Column(type = "integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy = "AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(type = "string", length=64, unique=true)
* @Assert\NotBlank
* @Assert\Length(max=64)
*/
private $name = '';
public function __toString(): string
{
return $this->id.' - '.$this->name;
}
public function getId(): ?int
{
return $this->id;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getName(): string
{
return $this->name;
}
}
Если я использую find
в контроллере, результат хороший
Можете ли вы добавить определение объекта Country? Или вы можете попробовать получить доступ к любому методу для загрузки (инициализации) объекта?
@MohammadZeinEddin Готово
В основном это связано с тем, что объект еще не инициализирован, а типы и свойства устанавливаются после инициализации ... немедленный дамп объекта может быть выполнен до инициализации ... попробуйте сделать что-нибудь с объектом перед сбросом, я думаю это установит свойства и типы ...
Когда я пытаюсь использовать метод получения идентификатора сразу после нахождения, я получаю ошибку ввода из-за строгой типизации получателя объекта. Но если я использую получатель имени, он работает.
Получил ту же проблему со старым laravel 5.1, обновление устранило проблему, не удалось найти, откуда она взялась, возможно, из той же старой зависимости.
У вас будут такие же результаты, если вы выполните эти запросы в контроллере?