I try this code: Symfony: ManyToMany table extra columns
This new field is because the user have a diferent role for diferent events.
In the fist time i can add add the new fields on table user.evento, but now i cant. And i dont find the problem.
I get this fail:
An exception occurred while executing ‘INSERT INTO user_evento (user_id, evento_id) VALUES (?, ?)’ with params [3, 18]: SQLSTATE[HY000]: General error: 1364 Field ‘tipoinvitado’ doesn’t have a default value
why not detecting the other 2 fields ?
capture of my sql update with the new fields
my entity UserHasEvento:
/** * @ORMEntity * @ORMTable(name="user_evento") */ class UserHasEvento { /** * @ORMId * @ORMColumn(name="id", type="integer") * @ORMGeneratedValue(strategy="AUTO") */ private $id; /** * @ORMManyToOne(targetEntity="Evento", cascade={"persist"}, fetch="LAZY") * @ORMJoinColumn(name="evento_id", referencedColumnName="id") */ private $eventos; /** * @ORMManyToOne(targetEntity="User", cascade={"persist","remove"}, fetch="LAZY" ) * @ORMJoinColumn(name="user_id", referencedColumnName="id",nullable=true) */ private $users; /** * @ORMColumn(name="tipoinvitado", type="string", length=255, nullable=true) */ private $tipoinvitado; /** * @var DateTime|null * * @ORMColumn(name="fechainscripcion", type="datetime", nullable=true) */ private $fechainscripcion; public function setTipoinvitado(string $tipoinvitado): self { $this->tipoinvitado = $tipoinvitado; return $this; } public function getTipoinvitado(): string { return $this->tipoinvitado; } public function getFechainscripcion() { return $this->fechainscripcion; } public function setFechainscripcion($fechainscripcion): self { $this->fechainscripcion = $fechainscripcion; return $this; } public function __construct() { $this->createdAt= new DateTime('now'); } }
My controller update.
public function asignarUsuario(Request $request, Evento $evento, Userhasevento $userhasevento){ $user_repo = $this->getDoctrine()->getRepository(User::class); $users = $user_repo->findAll(); $evento = $this->getDoctrine()->getRepository(Evento::class)->findOneById($evento); $form = $this->createForm(AsignarEventoFormType::class, $evento); $form->handleRequest($request); if($form->isSubmitted() && $form->isValid()){ $users = $evento->GetUsers(); foreach($users as $user){ $user->addEvento($evento); $evento->addUser($user); $userhasevento->SetTipoinvitado('normal'); $userhasevento->setFechainscripcion(new DateTime('now')); $em = $this->getDoctrine()->getManager(); $em->persist($evento); $em->persist($userhasevento); $em->flush(); } return $this->redirect($this->generateUrl('evento_detalle', ['id' => $evento->getId()])); } return $this->render('evento/AsignarEvento.html.twig',[ 'form' => $form->createView() ]); }
Advertisement
Answer
Is your field $tipoinvitado disappear? You might have changed your relation and the null boolean of $tipoinvitado at some point. You made your migration after changing any relation?
This can happen when you change your relations and had already data stored in you DB in a field that disappear because of you relation change.
I might be able to help you, don’t hesitate giving more info