2011-11-10 32 views
8

Tôi cố gắng để sử dụng FOS_UserBundle để quản lý người dùng của tôi nhưng mọi lúc tôi cố gắng cập nhật các dbSymfony2: FOS_Userbundle Định nghĩa trùng lặp khi cập nhật lược đồ db?

php app/console doctrine:schema:update --force 

tôi nhận được lỗi sau:

nét trùng lặp của cột 'username' trên thực thể trong một lĩnh vực hoặc lập bản đồ cột phân biệt đối xử. fos user bundle

Điều này cũng xảy ra với 'email' khi tôi nhận xét tên người dùng.

lớp người sử dụng của tôi là thực sự rất cơ bản:

namespace My\MyBundle\Entity; 

use FOS\UserBundle\Entity\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

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

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

/** 
* @ORM\Column(type="string", length="100") 
*/ 
protected $username; 

/** 
* @ORM\Column(type="string", length="100") 
*/ 
protected $name; 

/** 
* @ORM\Column(type="string", length="100") 
*/ 
protected $firstname; 

/** 
* @ORM\Column(type="string", length="150") 
*/ 
protected $email; 

} 

Am tôi thiếu cái gì?

Trả lời

13

My\MyBundle\Entity\User mở rộng FOS\UserBundle\Entity\User, do đó mở rộng FOS\UserBundle\Model\User, trường đã có trường $username. Nó cũng có trường $email. Vì vậy, bạn chỉ cần xóa các trường $username$email khỏi lớp học của mình.

+0

Rất cám ơn igorw! .. một số điều dường như không chỉ ra đủ sâu cho người mới bắt đầu .. Cảm ơn! – Mike

+9

Nhưng nếu bạn cần thêm xác nhận của riêng bạn vào những trường có nhóm xác thực của riêng bạn, làm cách nào bạn có thể thực hiện nếu bạn không có thuộc tính trong lớp người dùng của riêng mình nữa? – flu

+3

Tôi nhận được lỗi này ngay cả khi tôi xóa các trường email hoặc tên người dùng. Tôi biết câu hỏi này là cũ ... –

10

Mở rộng với FOS \ UserBundle \ Model \ User, không phải FOS \ UserBundle \ Entity \ User class. Bạn nên luôn mở rộng với Mô hình, không phải là Thực thể.

+0

Điều đó có tác dụng nhưng tại sao tôi không nên mở rộng Thực thể? – flu

+2

Vì thực thể đã chứa "chú thích". Bằng cách mở rộng mô hình, bạn có thể thực hiện chú thích của riêng mình trên trường đã tồn tại –

+1

Trong trường hợp này, bạn cần phải xác định lại tất cả chú thích (không ai được thừa hưởng từ 'FOS \ UserBundle \ Entity \ User') –

2

Đối với tôi, nó hoạt động bằng cách xóa chú thích Cột.

/** 
* @ORM\Column --> remove this line! 
*/ 
protected $password; 

Bạn có thể sử dụng @ORM \ AttributeOverrides cho người dùng hoặc lớp BaseUser để ghi đè lên các chú thích từ BaseUser. Ví dụ:

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
* @AttributeOverrides({ 
*  @AttributeOverride(name="password", 
*   [email protected](
*    nullable = false, 
*    unique = true, 
*    length = 123 
*   ) 
*  ) 
* }) 
class User extends BaseUser 
{ 
... 
Các vấn đề liên quan