dongzhi6382 2017-11-17 13:34
浏览 40
已采纳

我错过了什么 - Symfony 3 Doctrine Entity ManyToMany?

So both my entities have the ID property on them, yet I am getting a validation error about said IDs for both tables described below. I have seen a few other example of this issue here on SO, and have followed their solutions but still have yet to get passed this validation error.

I have followed Doctrines docs too and I guess I am just missing something. I have only been working with Symfony/Doctrine for a couple months now so maybe I am missing a concept.

I run php bin/console doctrine:schema:validate

[Mapping]  FAIL - The entity-class 'FacetCoreBundle\Entity\FacetUser' mapping is invalid:
* The referenced column name 'id' has to be a primary key column on the target entity class 'FacetCoreBundle\Entity\FacetUser'.
* The referenced column name 'id' has to be a primary key column on the target entity class 'FacetCoreBundle\Entity\FacetRole'.

[Database] OK - The database schema is in sync with the mapping files.

Ok well My FacetUser entity has the ID column and it is a primary key, same with the FacetRole entity.

FacetUser.php

/**
 * @ORM\Entity()
 * @ORM\Table(name="FACET_USER")
 */
class FacetUser implements LdapUserInterface, UserInterface
{
    /**
     * @var integer
     *
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(name="ID", type="integer")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="LDAP_GUID", type="string", length=100, unique=true)
     * LdapAttribute objectguid
     */
    private $ldapGuid;

    /**
     * @var string
     *
     * @ORM\Column(name="USERNAME", type="string", length=20)
     * LdapAttribute samaccountname
     */
    private $username;

    /**
     * @var string
     *
     * @ORM\Column(name="FIRST_NAME", type="string", length=100)
     * LdapAttribute givenname
     */
    private $firstName;

    /**
     * @var string
     *
     * @ORM\Column(name="LAST_NAME",type="string", length=100)
     * LdapAttribute sn
     */
    private $lastName;

    /**
     * @var string
     *
     * @ORM\Column(name="DISPLAY_NAME",type="string", length=255)
     * LdapAttribute displayname
     */
    private $displayName;

    /**
     * @var string
     *
     * @ORM\Column(name="TITLE",type="string", length=255)
     * LdapAttribute title
     */
    private $title;

    /**
     * @var string
     *
     * @ORM\Column(name="DEPARTMENT",type="string", length=100)
     * LdapAttribute department
     */
    private $department;

    /**
     * @var integer
     *
     * @ORM\Column(name="EMPLOYEE_ID",type="integer", length=10)
     * LdapAttribute employeeid
     */
    private $employeeId;

    /**
     * @var string
     *
     * @ORM\Column(name="MANAGER_USERNAME",type="string", length=7, nullable=true)
     */
    private $managerUsername;

    /**
     * @var string
     *
     * @ORM\Column(name="MANAGER_DISPLAY_NAME",type="string", length=255, nullable=true)
     */
    private $managerDisplayName;

    /**
     * @var string
     *
     * @ORM\Column(name="MANAGER_LDAP_GUID",type="string", length=100, nullable=true)
     */
    private $managerLdapGuid;

    /**
     * @var integer
     *
     * @ORM\Column(name="MANAGER_EMPLOYEE_ID",type="integer", length=7, nullable=true)
     */
    private $managerEmployeeId;

    /**
     * @var string
     *
     * @ORM\Column(name="EMAIL",type="string", nullable=true)
     * LdapAttribute mail
     */
    private $email;

    /**
     * @var string
     *
     * @ORM\Column(name="MOBILE",type="string", nullable=true)
     * LdapAttribute mobile
     */
    private $mobile;

    /**
     * @var array
     *
     * @ORM\Column(name="LDAP_MEMBERSHIPS",type="array", nullable=true)
     * LdapAttribute memberof
     */
    private $ldapMemberships = [];

    /**
     *
     * User can have many roles
     * @var array
     *
     * @ORM\ManyToMany(targetEntity="FacetCoreBundle\Entity\FacetRole")
     * @ORM\JoinTable(name="USER_ROLES",
     *     joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
     *     )
     *
     */
    private $roles;

    public function __construct()
    {
        $this->roles = new ArrayCollection();
    }

    ....

FacetRole.php

/**
 * FacetRole
 *
 * @ORM\Table(name="FACET_ROLE")
 * @ORM\Entity
 */
class FacetRole
{
    /**
     * @var integer
     *
     * @ORM\Column(name="ID", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     */
    private $id;

    /**
     * @var string
     *
     * @Assert\NotBlank()
     * @Assert\Length(
     *      min = 9,
     *      max = 100,
     *      minMessage = "Role name must be at least {{ limit }} characters long",
     *      maxMessage = "Role name cannot be longer than {{ limit }} characters"
     * )
     * @ORM\Column(name="ROLE_NAME", type="string", length=255, nullable=false, unique=true)
     *
     */
    private $roleName;

    /**
     * @var string
     *
     * @Assert\NotBlank()
     * @Assert\Choice({"Y","N"})
     *
     * @ORM\Column(name="GRANTABLE", type="string", length=1, nullable=false)
     */
    private $grantable;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="CREATED_ON", type="date", nullable=false)
     */
    private $createdOn;

    /**
     * @var string
     *
     * @Assert\NotBlank()
     * @Assert\Length(
     *     min="10",
     *     max="255",
     *     minMessage="Description needs to be at least {{ limit }} characters long.",
     *     maxMessage="Description needs to be less then {{ limit }} characters long."
     * )
     *
     * @ORM\Column(name="DESCRIPTION", type="string", length=255, nullable=true)
     */
    private $description;

    /**
     * @var FacetUser
     *
     * @ORM\ManyToOne(targetEntity="FacetUser")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="CREATED_BY", referencedColumnName="ID", nullable=false)
     * })
     */
    private $createdBy;

    ....

This creates the USER_ROLES table which stores the roles a user has been granted.

  • 写回答

1条回答 默认 最新

  • douyanyan1123 2017-11-17 14:30
    关注

    Per a comment by Greg, be sure to check character case! Refer to the 3rd bullet of the Doctrine Portability docs

    Case-sensitivity of column keys is handled differently in all databases, even depending on identifier quoting or not. You either need to know all the rules or fix the cases to lower/upper-case only.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab