(16) 981791110 contato@policast.studio

Como criar uma relação de um para um no Symfony?

O que é uma relação de um para um em Symfony?

Uma relação de um para um em Symfony é uma relação entre duas entidades, em que cada instância da primeira entidade está relacionada a no máximo uma instância da segunda entidade e vice-versa. Essa relação é implementada através de uma chave estrangeira, que é adicionada na tabela da entidade que não contém a chave primária.

Como criar entidades para a relação?

Para criar uma relação de um para um em Symfony, você precisa criar duas entidades: a entidade “pai” e a entidade “filha”. A entidade “pai” contém a chave primária, enquanto que a entidade “filha” contém a chave estrangeira. A relação é estabelecida através de anotações na classe de cada entidade.


class Pai
{
/**
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @ORMColumn(type="integer")
*/
private $id;

/**
* @ORMOneToOne(targetEntity="Filha")
* @ORMJoinColumn(name="filha_id", referencedColumnName="id")
*/
private $filha;
}

class Filha
{
/**
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @ORMColumn(type="integer")
*/
private $id;

/**
* @ORMOneToOne(targetEntity="Pai", mappedBy="filha")
*/
private $pai;
}

Como criar o schema do banco de dados?

Após criar as entidades e as anotações, você precisa atualizar o schema do banco de dados através do comando “doctrine:schema:update”. O Symfony irá gerar as tabelas e as relações automaticamente para você.

Como criar uma nova instância das entidades e persisti-las no banco de dados?

Para criar uma nova instância das entidades e persisti-las no banco de dados, você pode fazer o seguinte:


$pai = new Pai();
$filha = new Filha();
$pai->setFilha($filha);

$em->persist($pai);
$em->persist($filha);
$em->flush();

Como buscar a entidade “pai” e a entidade “filha” associada através da entidade “pai”?

Para buscar a entidade “pai” e a entidade “filha” associada através da entidade “pai”, você pode usar a função “getRepository” do EntityManager para obter o repositório da entidade e a função “findOneBy” para buscar a entidade desejada.


$paiRepository = $em->getRepository(Pai::class);
$pai = $paiRepository->findOneBy(['id' => 1]);

$filha = $pai->getFilha();

Como buscar a entidade “filha” e a entidade “pai” associada através da entidade “filha”?

Para buscar a entidade “filha” e a entidade “pai” associada através da entidade “filha”, você pode usar a mesma técnica descrita na pergunta anterior, mas alterando a classe do repositório e o campo de busca na função “findOneBy”.


$filhaRepository = $em->getRepository(Filha::class);
$filha = $filhaRepository->findOneBy(['id' => 1]);

$pai = $filha->getPai();

Como atualizar a entidade “pai” e a entidade “filha” associada?

Para atualizar a entidade “pai” e a entidade “filha” associada, você pode fazer as alterações diretamente nas entidades e em seguida persisti-las novamente no banco de dados.


$pai->setAlgumCampo("Novo valor");
$filha->setAlgumCampo("Outro valor");

$em->persist($pai);
$em->persist($filha);
$em->flush();

Como deletar a entidade “pai” e a entidade “filha” associada?

Para deletar a entidade “pai” e a entidade “filha” associada, você pode usar a função “remove” do EntityManager para marcar as entidades como deletadas e em seguida persisti-las novamente no banco de dados.


$pai = $em->getRepository(Pai::class)->findOneBy(['id' => 1]);
$em->remove($pai);
$em->flush();

Como criar uma entidade “pai” e salvar sua relação com uma entidade “filha” existente?

Para criar uma entidade “pai” e salvar sua relação com uma entidade “filha” existente, você pode buscar a entidade “filha” desejada e associá-la à nova instância da entidade “pai”.


$filha = $em->getRepository(Filha::class)->findOneBy(['id' => 1]);
$pai = new Pai();
$pai->setFilha($filha);

$em->persist($pai);
$em->flush();