我有2个实体,事件和用户。因此,基本上一个用户可以有多个事件。 我有一个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;
}
事件实体中的所有者字段:
/**
* @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检索数据,我将得到类似的信息:
在第二种情况下,初始化器->似乎是无限的,所以我认为问题可能在这里,但是我应该怎么做才能解决此问题?