与与当前操作无关的字段相关的理论投掷错误

问题描述 投票:0回答:1

我目前正在使用类似于imgur的应用,并且收到以下错误

[使用参数[1,1]执行'INSERT INTO user_gallery_views(gallery_id,user_id)VALUES(?,?)'时发生异常:SQLSTATE [23000]:违反完整性约束:19 UNIQUE约束失败:user_gallery_views.gallery_id,user_gallery_views.user_id

[在saved中调用将对象添加为users collection的路径时发生

App Controller的相关部分

/**
 * @Route("/image/{id}", name="imgDisp", methods={"GET"})
 */
public function imgDisp($id)
{
    $img = $this->gR->findBy(['id'=>$id]);
    if ($img) {
        $img = $img[0];
        $img->setImage(stream_get_contents($img->getImage()));
    }
    if($this->ls)
    {
        $this->viewMod($id);
    }

    return $this->render('app/imgDisp.html.twig', [
        'img'=>$img
    ]);
}

/**
 * @Route("/image/{id}/like", name="likeImg", methods={"POST"})
 */
public function likeImg($id)
{
    $img = $this->gR->findBy(['id'=>$id])[0];
    $user = $this->uR->findBy(['id'=>$this->session->get('user')->getId()])[0];
    if(!$img->getLikes()->contains($user))
    {
        $img->addLike($user);
    }
    else
    {
        $img->removeLike($user);
    }
    $this->em->flush();

    return $this->redirectToRoute('imgDisp', ['id'=>$id]);
}

/**
 * @Route("/image/{id}/save", name="saveImg", methods={"POST"})
 */
public function saveImg($id)
{
    $img = $this->gR->findBy(['id'=>$id])[0];
    $user = $this->uR->findBy(['id'=>$this->session->get('user')->getId()])[0];
    if(!$img->getSaves()->contains($user))
    {
        $img->addSave($user);
    }
    else
    {
        $img->removeSave($user);
    }
    $this->em->flush();

    return $this->redirectToRoute('imgDisp', ['id'=>$id]);
}

private function viewMod($id)
{
    $img = $this->gR->findBy(['id'=>$id])[0];
    $user = $this->uR->findBy(['id'=>$this->session->get('user')->getId()])[0];

    if(!$img->getViews()->contains($user))
    {
        $img->addView($user);
        $this->em->flush();
    }
}

画廊实体(与问题有关的部分)

/**
 * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="likes")
 * @ORM\JoinTable(name="user_gallery_likes")
 */
private $likes;

/**
 * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="collection")
 * @ORM\JoinTable(name="user_gallery_saves")
 */
private $saves;

/**
 * @ORM\ManyToMany(targetEntity="App\Entity\User", inversedBy="views")
 * @ORM\JoinTable(name="user_gallery_views")
 */
private $views;


/**
 * @return Collection|User[]
 */
public function getLikes(): Collection
{
    return $this->likes;
}

public function addLike(User $like): self
{
    if (!$this->likes->contains($like)) {
        $this->likes[] = $like;
    }

    return $this;
}

public function removeLike(User $like): self
{
    if ($this->likes->contains($like)) {
        $this->likes->removeElement($like);
    }

    return $this;
}

/**
 * @return Collection|User[]
 */
public function getSaves(): Collection
{
    return $this->saves;
}

public function addSave(User $save): self
{
    if (!$this->saves->contains($save)) {
        $this->views[] = $save;
    }

    return $this;
}

public function removeSave(User $save): self
{
    if ($this->saves->contains($save)) {
        $this->saves->removeElement($save);
    }

    return $this;
}

/**
 * @return Collection|User[]
 */
public function getViews(): Collection
{
    return $this->views;
}

public function addView(User $view): self
{
    if (!$this->views->contains($view)) {
        $this->views[] = $view;
    }

    return $this;
}

用户实体(与问题有关的部分)

/**
 * @ORM\ManyToMany(targetEntity="App\Entity\Gallery", mappedBy="saves")
 */
private $collection;

/**
 * @ORM\ManyToMany(targetEntity="App\Entity\Gallery", mappedBy="likes")
 */
private $likes;

/**
 * @ORM\ManyToMany(targetEntity="App\Entity\Gallery", mappedBy="views")
 */
private $views;


/**
 * @return Collection|Gallery[]
 */
public function getCollection(): Collection
{
    return $this->collection;
}

public function addCollection(Gallery $collection): self
{
    if (!$this->collection->contains($collection)) {
        $this->collection[] = $collection;
    }

    return $this;
}

public function removeCollection(Gallery $collection): self
{
    if ($this->collection->contains($collection)) {
        $this->collection->removeElement($collection);
    }

    return $this;
}
/**
 * @return Collection|Gallery[]
 */
public function getLikes(): Collection
{
    return $this->likes;
}

public function addLike(Gallery $like): self
{
    if (!$this->likes->contains($like)) {
        $this->likes[] = $like;
        $like->addLike($this);
    }

    return $this;
}

public function removeLike(Gallery $like): self
{
    if ($this->likes->contains($like)) {
        $this->likes->removeElement($like);
        $like->removeLike($this);
    }

    return $this;
}

/**
 * @return Collection|Gallery[]
 */
public function getViews(): Collection
{
    return $this->views;
}

public function addView(Gallery $view): self
{
    if (!$this->views->contains($view)) {
        $this->views[] = $view;
        $view->addView($this);
    }

    return $this;
}

我不明白的是,为什么甚至在/image/{id}/save中都没有使用user_galler_views时,错误会引起关注?

我确定没有看到任何东西,但什至都不知道,所以我充满希望您能帮助我

symfony doctrine
1个回答
0
投票
似乎您将实体存储到错误的数组。

public function addSave(User $save): self { if (!$this->saves->contains($save)) { $this->views[] = $save; } return $this; }

© www.soinside.com 2019 - 2024. All rights reserved.