У меня есть 2 объекта, Event & User.Таким образом, в основном пользователь может иметь несколько событий.У меня есть EventItemDataProvider и в методе getItem я сделал что-то вроде этого:
public function getItem(string $resourceClass, $id, string $operationName = null, array $context = []): ?Event
{
if ($event = $this->cache->get($id, Event::class)) {
return $event;
}
$event = $this->em->getRepository(Event::class)->find($id);
if($event) {
$this->cache->set($id, $event, 120);
}
return $event;
}
Когда данные возвращаются без кэша, у меня есть этот результат, который является правильным с правильным именем пользователя:
{
"@context": "/contexts/Event",
"@id": "/events/20",
"@type": "Event",
"title": "new global event 3",
"description": "A big global event 3",
"createdAt": "2019-07-05T09:20:48+00:00",
"owner": {
"@id": "/users/3",
"@type": "User",
"username": "test3"
}
}
Но если я нажму тот же метод во второй раз, он будет извлекать данные из кэша (redis), но на этот раз имя пользователя будет пустым:
{
"@context": "/contexts/Event",
"@id": "/events/20",
"@type": "Event",
"title": "new global event 3",
"description": "A big global event 3",
"createdAt": "2019-07-05T09:20:48+00:00",
"owner": {
"@id": "/users/3",
"@type": "User",
"username": ""
}
}
Почему мое имя пользователя пусто, когдаЯ получаю его из redis?
В основном мой класс кэша имеет следующие методы:
public function get(string $uniq, string $className)
{
$value = $this->cache->getItem('test_key')->get();
return $value;
}
public function set(string $uniq, object $entity, int $expires = 60)
{
$save = $this->cache->getItem('test_key');
$save->set($entity);
$save->expiresAfter($expires);
$saved = $this->cache->save($save);
return $saved;
}
Поле владельца в моем объекте Event:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="events")
* @ORM\JoinColumn(nullable=false)
* @Groups({"event:read", "event:write", "event:update"})
* @Assert\Valid()
*/
private $owner;
Поле имени пользователя вмой пользовательский объект:
/**
* @ORM\Column(type="string", length=25, unique=true)
* @Groups({"user:read", "user:write", "user:update", "event:item:get", "event:update"})
* @Assert\NotBlank(message="Please provide a username")
*/
private $username;
Моя конфигурация кэша Redis:
cache:
app: cache.adapter.redis
default_redis_provider: "redis://redis"
pools:
custom.cache.entity:
adapter: cache.app
default_lifetime: 120
Почему мое имя пользователя заполняется при извлечении его из Doctrine Repository, но остается пустым при извлечении его из Redis?
С помощью Xdebug я вижу, что если я получаю данные из Doctrine, у меня есть что-то вроде этого:
Но если я получаю данные из кэша, у меня есть что-товот так:
Во втором случае initializer -> это кажется бесконечным, поэтому я думаю, что проблема, вероятно, здесь, но что я должен сделать, чтобы решить эту проблему