2011-09-06 18 views
8

Tôi có mối quan hệ sau trong đơn vị học thuyết của tôi:thuyết 2: Tiết kiệm Entity trong mối quan hệ phức tạp

FavoriteRecipe

/** 
* @ManyToOne(targetEntity="User", inversedBy="favoriteRecipes") 
*/ 
private $user; 

/** 
* @ManyToOne(targetEntity="Recipe", inversedBy="favoriteRecipes") 
*/ 
private $recipe; 

Recipe

/** 
* @OneToMany(targetEntity="FavoriteRecipe", mappedBy="user") 
*/ 
private $favoriteRecipes; 

tài

/** 
* @OneToMany(targetEntity="FavoriteRecipe", mappedBy="user") 
*/ 
private $favoriteRecipes; 

Trong một bộ điều khiển của tôi, tôi có đoạn mã sau:

$favoriteRecipe = new \Entities\FavoriteRecipe(); 
$favoriteRecipe->setRecipe($recipe); 
$favoriteRecipe->setUser($user); 
$this->_em->persist($favoriteRecipe); 
$this->_em->flush(); 

Nhưng điều này ném một ngoại lệ với thông báo sau:

Một thực thể mới được tìm thấy thông qua một mối quan hệ đó là không được định cấu hình để xếp hàng hoạt động liên tục: Thực thể \ User @ 00000000408bd010000000007cb1380e. Rõ ràng vẫn tồn tại thực thể mới hoặc định cấu hình hoạt động liên tục xếp tầng trên mối quan hệ .

Làm cách nào để tạo và lưu chính xác thực thể FavoriteRecipe?

Trả lời

7

Bạn có đặt tùy chọn xếp tầng cho tất cả các thực thể quan hệ của mình không? Này được thực hiện bằng cách thiết lập thuộc tính cascade cho excample: cascade = { "kiên trì", "loại bỏ"}

Có lẽ trang này: http://www.doctrine-project.org/docs/orm/2.0/en/reference/working-with-associations.html

Hoặc những đoạn phim này: http://www.zendcasts.com/many-to-many-with-doctrine-2/2011/03/ http://www.zendcasts.com/one-to-many-with-doctrine-2/2011/03/

+1

Để mà bên liên kết để tôi thêm tùy chọn xếp tầng? Phía sở hữu hoặc mặt nghịch đảo? – moteutsch

+0

Nó phụ thuộc vào hành vi mà bạn muốn nhưng trong tình huống của bạn, tôi nghĩ rằng mặt nghịch đảo. Tôi sẽ nói thử nó, và nhìn những gì vui vẻ trong cơ sở dữ liệu. –

+2

Và tôi sẽ thêm "và quay lại đây để chia sẻ những phát hiện của bạn". Mọi người đã giúp bạn, đừng quên giúp mọi người :) – Ninj