FOS Userbundle - 声明自己的userID字段

时间:2014-02-04 11:52:45

标签: symfony fosuserbundle

我已经安装了FOS UserBundle。

问题是:我的用户表的“id”字段称为userID。

我无法更改依赖于userID字段的其他表和编程的bc。

如果我尝试登录,则会收到错误消息:

Unrecognized field: id

问题似乎在于对id字段的调用:

UserManager ->findUserBy (array('id' => 1))

我可以以某种方式覆盖FOS UserBundle,以便findby()方法将id传递给userID吗? 或者我是否完全错了,必须采取另一种方式?

3 个答案:

答案 0 :(得分:0)

实体中的字段名称不必与sql表中的字段名称相同。因此,您可以在doctrine实体中使用“id”作为字段,并将其映射到sql表中的“userID”字段。

如果您正在为您的用户实体使用Doctrine注释,就像在FOSUserBundle文档中一样,这可以解决问题:

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

我没有对它进行测试,并且它有可能无效,因为id字段总是有点“特殊”,但它可能值得一试。

答案 1 :(得分:0)

生成您自己的UseBundle并添加定义类似的实体。

  <?php

  namespace Demo\UserBundle\Entity;

  use FOS\UserBundle\Model\User as BaseUser;
  use Doctrine\ORM\Mapping as ORM;
  use Doctrine\Common\Collections\ArrayCollection;

  /**
   * @ORM\Entity(repositoryClass="Sciviz\UserBundle\Entity\UserRepository")
   * @ORM\Table(name="fos_user")
  */
  class User extends BaseUser {

  /**
   * @ORM\Id
   * @ORM\Column(type="integer")
   * @ORM\GeneratedValue(strategy="AUTO")
   */
   protected $id;

  /** @ORM\Column(name="first_name", type="string", length=255, nullable=true) */
    protected $first_name;
     ..................

另见本教程 http://knpuniversity.com/screencast/fosuserbundle-ftw

答案 2 :(得分:0)

您的列名“USER_ID”可能区分大小写。

 /**
     * @ORM\Entity
     * @ORM\Table(name="user-table")
     */
    class User extends BaseUser
    {
        /**
        * @ORM\Id
        * @ORM\Column(type="integer", name="USER_ID")
        * @ORM\GeneratedValue(strategy="AUTO")
        */
        protected $id;

    }