【问题标题】:How to make nullable a relationship ManytoOne如何使多对一关系可以为空
【发布时间】:2016-09-20 08:06:28
【问题描述】:

我在两个实体之间有一个多对一关系:Usuario 和 Departamento,有些用户没有任何部门,我想让实体 Usuario 中的部门部门为空,如何做到这一点。我的代码如下所示:

<?php

namespace CECMED\TarifaBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Usuario
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="CECMED\TarifaBundle\Entity\UsuarioRepository")
 * @UniqueEntity("email")
  */
class Usuario implements UserInterface{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     * @Assert\NotBlank(message="No debe dejar este campo vacío")
     * @ORM\Column(name="nombre", type="string",unique=true, length=255)
     */
    private $nombre;

    /**
     * @var string
     * @Assert\NotBlank(message="No debe dejar este campo vacío")
     * @ORM\Column(name="apellidos", type="string", length=255)
     */
    private $apellidos;

    /**
     * @var string
     * @Assert\NotBlank(message="No debe dejar este campo vacío")
     * @ORM\Column(name="email", type="string", length=255)
     */
    private $email;


    /**
     * @ORM\ManyToOne(targetEntity="Departamento", inversedBy="usuarios")
     * @ORM\JoinColumn(name="id_departamento", referencedColumnName="id")
     */
    private $departamento;

【问题讨论】:

    标签: php symfony orm doctrine-orm


    【解决方案1】:
    /**
     * @ORM\ManyToOne(targetEntity="Departamento", inversedBy="usuarios")
     * @ORM\JoinColumn(name="id_departamento", referencedColumnName="id", nullable=true)
     */
    private $departamento;
    

    如上所示,你应该把属性nullable放到JoinColumn

    别忘了

    更新您的架构doctrine:schema:update --force

    此外,如果您已经生成了 setter,请记住更改它以接受可为空的值,例如 setDepartamento(Departamento $departamento = null)

    【讨论】:

    • 不应该是nullable=true而不是false吗?
    • @dragoste,是的,我打错了
    • 我在我的关系中添加 nullable=true,当我插入用户时,这是错误:执行 'SELECT d0_.id AS id0, d0_.nombre AS nombre1, d0_.id_dependencia AS 时发生异常id_dependencia2 FROM detamento d0_ WHERE d0_.id IN (?)' with params [""]: SQLSTATE[22P02]: Invalid text representation: 7 ERROR: la sintaxis de entrada no es válida para integer: «»
    • @JesúsSotoMitjans:您应该使用正确的命令更新您的架构或生成迁移(如果您使用它)
    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多