Hej!
Podczas wywoływania takiego kodu:
$resource = new Resource($this->container->get('entityManager'));
$monster = $resource->find('one', 'Entity\Monster\Monster', [
'idMonster' => 1
]);
var_dump($monster->getAttribute());
Z encji:
/**
* @ORM\Entity
* @ORM\Table(name="monster")
*/
class Monster extends Entity
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $idMonster;
/**
* @ORM\Column(type="string", length=255)
*/
private $nameMonster;
/**
* @ManyToOne(targetEntity="Entity\Attribute\Attribute")
* @JoinColumn(name="idAttribute", referencedColumnName="idAttribute")
*/
private $attribute;
public function getArrayCopy(): array
{
return get_object_vars($this);
}
public function getNameMonster(): string
{
return $this->nameMonster;
}
public function getAttribute(): Attribute
{
return $this->attribute;
}
}
Zostaje mi zwrócony jakby cały doctrine. Wraz z hasłem, loginem do bazy i pierdyliard innymi rzeczami od doctrine. Nie rozumiem dlaczego.
Encja Attribute:
/**
* @ORM\Entity
* @ORM\Table(name="attribute")
*/
class Attribute extends Entity
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $idAttribute;
/**
* @ORM\Column(type="integer")
*/
private $health;
/**
* @ORM\Column(type="integer")
*/
private $strength;
public function getArrayCopy(): array
{
return get_object_vars($this);
}
public function getHealth(): int
{
return $this->health;
}
public function getStrength(): int
{
return $this->strength;
}
}
Ku mojemu większemu zdziwieniu wywołanie:
var_dump($monster->getAttribute()->getStrength());
Zwraca wartość w mgnieniu oka, nie wczytując już każdego z atrybutów doctrine.
Wie ktoś dlaczego tak się dzieje, czy będę musiał na własną rękę studiować dlaczego nie zwracam encji Attribute a cały Doctrine?
Dodam również niedokończoną metodę find:
public function find(string $count, string $repository, array $arguments = []): Entity
{
switch ($count) {
case 'one':
$resource = $this->entityManager->getRepository($repository)->findOneBy($arguments);
return $resource;
break;
}
}
Gdyby był potrzebne dodatkowy kod, dajcie znać.