我在Symfony中有一对多的关系。因此,我建立自己的移动管理,为多个用户创建事件。
当我将事件保存到数据库时,我将user_id保留为null,并且我不会为登录用户保存它,我希望多个用户保存该事件。
所以我不想为我想要保存事件的用户保存user_id,在var_dump上我获取该用户的用户ID,但是当它保存到我的数据库中的null时。任何人都知道如何解决这个问题并解决问题?
班级用户:
class User implements AdvancedUserInterface, \Serializable
{
/**
* @ORM\OneToMany(targetEntity="App\ShiftBundle\Entity\Shift", mappedBy="users", cascade={"all"})
*/
private $shifts;
public function __construct()
{
$this->isActive = true;
$this->isBlocked = false;
$this->shifts = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Add shifts
*
* @param \App\ShiftBundle\Entity\Shift $shifts
* @return User
*/
public function addShift(\App\ShiftBundle\Entity\Shift $shifts)
{
$this->shifts[] = $shifts;
$shifts->setUsers($this);
return $this;
}
/**
* Remove shifts
*
* @param \App\ShiftBundle\Entity\Shift $shifts
*/
public function removeShift(\App\ShiftBundle\Entity\Shift $shifts)
{
$this->shifts->removeElement($shifts);
}
/**
* Get shifts
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getShifts()
{
return $this->shifts;
}
}
班级转换
class Shift
{
/**
* Set userId
*
* @param integer $userId
* @return Shift
*/
public function setUserId($userId)
{
$this->user_id = $userId;
return $this;
}
/**
* Get userId
*
* @return integer
*/
public function getUserId()
{
return $this->user_id;
}
/**
* @ORM\ManyToOne(targetEntity="App\AuthBundle\Entity\User", inversedBy="shifts")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $users;
/**
* Set users
*
* @param \App\AuthBundle\Entity\User $users
* @return Shift
*/
public function setUsers(\App\AuthBundle\Entity\User $users)
{
$this->users = $users;
return $this;
}
/**
* Get users
*
* @return \App\AuthBundle\Entity\User
*/
public function getUsers()
{
return $this->users;
}
}
控制器
public function createShiftTimeAction(Request $request)
{
$content = $request->getContent();
$json = json_decode($content);
$repository = $this->getDoctrine()->getRepository('AppShiftBundle:Shift');
$shift = new Shift();
var_dump($json->user_id);
$shift->setDay($json->day);
$shift->setMonth($json->month);
$shift->setYear($json->year);
$shift->setTimeFrom($json->time_from);
$shift->setTimeTo($json->time_to);
$shift->setUserId($json->user_id);
$em = $this->getDoctrine()->getManager();
$em->persist($shift);
$em->flush();
return new JsonResponse($json);
}
答案 0 :(得分:2)
您不应该为实体分配ID。使用ORM(任何,不仅是Doctrine),你不应该使用ID,而是使用对象和模型。
所以,不要编码
$shift->setUserId($json->user_id);
相反,你应该做
$shift->setUser($userRepository->find($json->user_id));
答案 1 :(得分:1)
您正在使用对象关系模型,这意味着您需要完成对象和模型。
$shift->setUser($userRepository->find($json->user_id));