我有一個很大(簡單)的問題。ManyToOne原則只改變連接實體的值而不是創建新實體
我有一個地理位置屬性作爲一個多對一關係
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
/**
* User
*/
class User implements AdvancedUserInterface, \Serializable
{
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Location", cascade= {"persist"})
* @ORM\JoinColumn(name="location_id", referencedColumnName="id")
*/
private $geolocation;
用戶的實體,我有一個位置的實體是這樣的:
/**
* Location
*
* @ORM\Table(name="location")
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\LocationRepository")
*/
class Location
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="latitude", type="float", scale=12, precision=18)
*/
private $latitude;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="longitude", type="float", scale=12, precision=18)
*/
private $longitude;
/**
* @var string
*
* @Assert\NotBlank()
* @ORM\Column(name="address", type="string", length=255)
*/
private $address;
現在的問題,我想改變(更新)我的用戶的位置。對此,我有一個FormType:
$builder->add('geolocation', 'jquerygeolocation', array();
的「jquerygeolocation」 FormType是創建FormType與
data_class' => 'AppBundle\Entity\Location'
但是,當我想改變(更新)用戶位置我有一個很大的問題。如果該位置甚至不在數據庫中,並且我想要將現有位置與用戶連接,我想要保留一個新位置。但相反,學說只會改變連接位置的值。
例如:
前:
後:
正如你所看到的,ID是一樣的。只有一個更新。我猜的邏輯沒有什麼。
有人可以幫助我這個。
謝謝邁克爾。
您應該可以在「舊」位置上調用$ em-> detach($ location)以防止它被更新。 – redbirdo
酷!謝謝!那很棒! – Slowwie