用户ID不会保存到数据库获取null

时间:2016-10-25 08:03:15

标签: php symfony

我在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);
}

2 个答案:

答案 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));