Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 将对象持久化到数据库错误_Symfony_Orm_Doctrine_Persistent_Symfony4 - Fatal编程技术网

Symfony 将对象持久化到数据库错误

Symfony 将对象持久化到数据库错误,symfony,orm,doctrine,persistent,symfony4,Symfony,Orm,Doctrine,Persistent,Symfony4,我有一个错误: Expected argument of type "integer or null", "App\Entity\User" given 我不明白,我明白这个错误,但我不知道为什么会出现 以下是我的AddController.php文件: <?php namespace App\Controller\Tag; use App\Entity\Tag; use App\Form\Tag\AddType; use Symfony\Bundle\

我有一个错误:

Expected argument of type "integer or null", "App\Entity\User" given
我不明白,我明白这个错误,但我不知道为什么会出现

以下是我的AddController.php文件:

<?php
    namespace App\Controller\Tag;

    use App\Entity\Tag;
    use App\Form\Tag\AddType;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\Config\Definition\Exception\Exception;
    use Symfony\Component\HttpFoundation\Request;

    class AddController extends Controller
    {
        public function add(Request $request)
        {
            $tag  = new Tag();
            $form = $this->createForm(AddType::class, $tag);

            $form->handleRequest($request);

            if ($form->isSubmitted() && $form->isValid()) {
                $entityManager = $this->getDoctrine()->getManager();

                $pageInfo = $form->getData();

                $description = $pageInfo['description'];
                $name        = $pageInfo['name'];
                $guru        = $pageInfo['guru_id'];
                $createdTs   = new \DateTime();

                $tag->setApproved(false);
                $tag->setDescription($description);
                $tag->setName($name);
                $tag->setGuruId((is_int($guru) ? $guru : null));
                $tag->setCreatedTs($createdTs);

                try {
                    $entityManager->persist($tag);
                    $entityManager->flush();

                    $this->addFlash('success', 'Tag Submitted for review! '. $guru);
                } catch (Exception $e) {
                    $this->addFlash('danger', 'Something went skew-if. Please try again.');
                }

                return $this->redirectToRoute('tag_add');
            }

            return $this->render('tag/add.html.twig', array('form' => $form->createView()));
        }
    }
我的标记实体:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\TagRepository")
 */
class Tag
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=125)
     */
    private $name;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $description;

    /**
     * @ORM\Column(type="boolean")
     */
    private $approved;

    /**
     * @ORM\Column(type="datetime")
     */
    private $created_ts;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    private $last_edit_ts;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    private $guru_id;

    public function getId()
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getDescription(): ?string
    {
        return $this->description;
    }

    public function setDescription(?string $description): self
    {
        $this->description = $description;

        return $this;
    }

    public function getApproved(): ?bool
    {
        return $this->approved;
    }

    public function setApproved(bool $approved): self
    {
        $this->approved = $approved;

        return $this;
    }

    public function getCreatedTs(): ?\DateTimeInterface
    {
        return $this->created_ts;
    }

    public function setCreatedTs(\DateTimeInterface $created_ts): self
    {
        $this->created_ts = $created_ts;

        return $this;
    }

    public function getLastEditTs(): ?\DateTimeInterface
    {
        return $this->last_edit_ts;
    }

    public function setLastEditTs(\DateTimeInterface $last_edit_ts): self
    {
        $this->last_edit_ts = $last_edit_ts;

        return $this;
    }

    public function getGuruId(): ?int
    {
        return $this->guru_id;
    }

    public function setGuruId(?int $guru_id): self
    {
        $this->guru_id = $guru_id;

        return $this;
    }
}
它仍然给出相同的错误,所以我真的不确定它是如何生成的。。。如何将EntityType下拉列表中的整数持久化到数据库中

谢谢

您可能在AddType表单中有一个EntityType字段来处理guru_id属性,它正在使用setGuruId?int$guru_id方法自动映射用户提交的值实例。这就是为什么:

Expected argument of type "integer or null", "App\Entity\User" given
您有一些选项可以解决这个问题,但最好的方法可能是将guru_id映射更改为与用户的多通关系:

此外,我将删除以下代码:

$tag->setDescription($description);
$tag->setName($name);
$tag->setGuruId((is_int($guru) ? $guru : null));
因为表单组件在提交数据后已经完成了此过程

作为一种快速解决方法,您可以通过删除typehint来解决此问题:

public function setGuruId($guru_id): self
{
    $this->guru_id = $guru_id instanceof User ? $guru_id->getId() : $guru_id;

    return $this;
}

请将您的问题链接到您的标签实体。我认为你使用条令映射是错误的way@Mcsky它是我的make:entity自动生成的-还需要代码还是?寻找密码yep@Mcsky查看更新的问题古鲁是您的表中与标签相关的吗?如果是的话,这是一个映射原则的问题。我写的答案不是用户密钥,它们之间没有关系。正如您在实体中看到的,guru是integerI类型的一个简单字段。。。但就目前而言,并没有暗示guru正在接收用户id。应该先询问表单内容和完整的错误消息。。。OP可能遗漏了其他内容。@Preciel这可能是它^^^ guru不是一个用户,但它受…这是它indeedy:ty:
// Tag entity

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\User")
 */
private $guru;

public function getGuru(): ?User
{
    return $this->guru;
}

public function setGuru(?User $guru): self
{
    $this->guru = $guru;

    return $this;
}
$tag->setDescription($description);
$tag->setName($name);
$tag->setGuruId((is_int($guru) ? $guru : null));
public function setGuruId($guru_id): self
{
    $this->guru_id = $guru_id instanceof User ? $guru_id->getId() : $guru_id;

    return $this;
}