symfony2类的对象无法转换为字符串

时间:2014-08-08 09:26:55

标签: arrays string symfony object entity

我在创建新用户时遇到了一些奇怪的错误。

Catchable Fatal Error: Object of class Pr\UserBundle\Entity\Group could not be converted to string in /var/www/symfony/webprojekt/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php line 120 

这种情况发生了,因为我改变了选择" usergroup"因为我不想为用户分配多个用户组(例如ROLE_USER),所以只需一个选择。

我在下方添加了用户和群组实体,但我没有看到任何问题 - 我再次陷入困境:(

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

/**
* @ORM\Column(type="string", length=8, nullable=true)
*/
protected $mobilepin;

/**
 * @ORM\Column(type="integer", nullable=true)
 */
protected $client;

/**
 * @ORM\Column(type="integer", nullable=true)
 */
private $client_id;

/**
 * @ORM\Column(type="string", length=16383, nullable=true) //16383 = max varchar utf8
 */
private $imageurl;

/**
 * @ORM\Column(type="string", length=255, nullable=true)

 */
protected $firstname;

/**
 * @ORM\Column(type="string", length=255, nullable=true)

 */
protected $lastname;

    /**
 * @ORM\Column(type="string", length=255, nullable=true)

 */
protected $emailalert;

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

/**
 * @ORM\Column(type="integer", nullable = true)


 */
protected $lock_state;

/**
* @ORM\Column(type="array", nullable=true)
 * @Assert\NotBlank()(message="Check locations")
 */
private $locations;

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

/**
 * @ORM\Column(type="string", length=5, options={"fixed" = true, "default" = "de_DE"})
   */
private $locale = 'de_DE';

/**
 * @ORM\Column(type="string", length=32)
 */
private $timezone = 'UTC';
 /**
 * @ORM\Column(type="array", nullable=true)

 */
private $created='1';

我小组的那个

/**
* @ORM\Entity
* @ORM\Table(name="user_group")
*/
class Group
{
/**
 * @ORM\Column(type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;



/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}


/**
 * @ORM\Column(type="string", length=255, nullable=true)

 */
protected $name;

    /**
   * @ORM\Column(type="string", length=255, nullable=true)

 */
protected $roles;

至少我是如何创造选择的:

->add('usergroups', 'entity', array('class' => 'PrUserBundle:Group','property' => 'name','required' => true, 'empty_value'    => 'Benutzergruppe','multiple'  => false, 'expanded'  => false))

很奇怪:(

编辑:如果我改变"用户组"从

 * @ORM\Column(type="string", length=255, nullable=true)

 * @ORM\Column(type="array", nullable=true)

它工作正常。但是,保存数据看起来像

O:26:"Pr\UserBundle\Entity\Group":3:{s:5:"

这看起来非常奇怪和错误。我考虑过保存已分配组的ID

2 个答案:

答案 0 :(得分:1)

如果要在User和UserGroup之间创建关系,则需要更改列定义:

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

/**
* @ManyToMany(targetEntity="Group")
*/
private $usergroups;

然后在组中定义反向关系:

Group {
    /**
    * @ManyToMany(targetEntity="User")
    */
    private $users;

您可以在此处详细了解有关学说的关系:http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html或此处:http://symfony.com/doc/current/book/doctrine.html#entity-relationships-associations

·彼得

答案 1 :(得分:1)

尝试将用户实体中的“用户组”字段映射到组实体,而不是将其设置为字符串字段。

/**
 * @ManyToOne(targetEntity="Group")
 * @JoinColumn(name="group_id", referencedColumnName="id")
 */
private $usergroups;

您还可以在此处查看有关映射的文档: http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#association-mapping