symfony relacion ManyToOne

solo hay 2 tipos de relaciones

1) ManyToOne
2) ManyToMany

tablas Genus y GenusNote

1 GenusNote hace referencia a 1 Genus, 1 Genus puede tener varias GenusNote

class GenusNote{
...
/**
* @ORM\ManyToOne(targetEntity="Genus")
*/
private $genus;
...
}


observaciones:
1) para identificar cual es la tabla/entidad con la relacion ManyToOne, sólo debemos pensar en cual de ellas tendrá en sus atributos la foreign key.

2)por default el  campo genus_id se le asigna el valor de null, esto no es correcto, entonces modifiquemos la entidad GenusNote
agregandole una propiedad de null false al atributo.

/**
     * @ORM\ManyToOne(targetEntity="Genus")
     * @ORM\JoinColumn(nullable=false)
     */
    private $genus;

(si se hace este cambio despues de haber generado un archivo de migration y se genera uno nuevo de migration no se va a poder ejecutar pues va a salir un error porque no se puede modificar el foreign key.....)

crear el archivo de migrations

php app/console doctrine:migrations:diff




ejecutar las migrations

php app/console doctrine:migrations:migrate


en el controller:



class GenusController extends Controller
{
/**
* @Route("/new")
*/
public function newAction()
{
$em = $this->getDoctrine()->getManager();
//
$genus = new Genus();
$genus->setName('Octopus'.rand(1, 100));

$note = new GenusNote();
$note->setNote('I counted 8 legs... as they wrapped around me');
$note->setGenus($genus);

$em->persist($genus);
$em->persist($note);
$em->flush();

return new Response("hecho!");  
}
}

levantar el server:

php app/console server: run

http://127.0.0.1:8000/new




No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable