问题描述
我正在使用 symfony 和 api-platform 开发一个 PHP 应用程序,当我想将数据保存在数据库中时遇到了问题。
我需要创建三个实体,即 Person、PersonCivility 和 PersonCivilityDetail。我还个性化了 Person 实体,以便对于每个 Person 实体,我们可以了解其当前的礼貌。所以我不得不使用 PersonCivilityDetailRepository Repository 来执行 sql 查询并将其注入到 Person 实体的构造函数中。这就是我在创建实体时遇到问题的地方。以下是不同类的代码摘录:
人
<?PHP
class Person
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(type="bigint")
*/
private ?int $id = null;
/**
* @ORM\Column(type="string",length=255,nullable=true)
*/
private ?string $firstName = null;
/**
* @ORM\Column(type="string",length=255)
*/
private ?string $lastName = null;
/**
* @ORM\OnetoMany(targetEntity=PersonCivilityDetail::class,mappedBy="person",cascade={"persist"})
* @var PersonCivilityDetail[]|ArrayCollection
*/
private $personCivilityDetails;
/**
* @var PersonCivilityDetailRepository
*/
private PersonCivilityDetailRepository $personCivilityDetailRepository;
public function __construct(PersonCivilityDetailRepository $personCivilityDetailRepository)
{
$this->personCivilityDetails = new ArrayCollection();
$this->personCivilityDetailRepository = $personCivilityDetailRepository;
}
/**
* others codes
*/
/**
* @return PersonCivility|null
* @throws NonUniqueResultException
*/
public function getCivility(): ?PersonCivility
{
return ($this->personCivilityDetailRepository
->findCivility($this)
);
}
}
个人文明
<?PHP
class PersonCivility
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(type="bigint")
*/
private ?int $id = null;
/**
* @ORM\Column(type="string",length=10)
*/
private ?string $abbreviation = null;
/**
* @ORM\Column(type="string",length=100)
*/
private ?string $wording = null;
/**
* @ORM\OnetoMany(targetEntity=PersonCivilityDetail::class,mappedBy="personCivility")
* @var PersonCivilityDetail[]|ArrayCollection
*/
private $personCivilityDetails;
public function __construct()
{
$this->personCivilityDetails = new ArrayCollection();
}
}
PersonCivilityDetail
<?PHP
class PersonCivilityDetail
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Column(type="bigint")
*/
private ?int $id = null;
/**
* @ORM\ManyToOne(targetEntity=Person::class,inversedBy="personCivilityDetails")
* @ORM\JoinColumn(nullable=false)
*/
private ?Person $person = null;
/**
* @ORM\ManyToOne(targetEntity=PersonCivility::class,inversedBy="personCivilityDetails")
* @ORM\JoinColumn(nullable=false)
*/
private ?PersonCivility $personCivility = null;
/**
* @ORM\Column(type="datetime")
*/
private ?DateTimeInterface $createdAt = null;
/**
* @ORM\Column(type="boolean")
*/
private ?bool $isActual = null;
}
和PersonCivilityDetailRepository
<?PHP
/**
* @method PersonCivilityDetail|null find($id,$lockMode = null,$lockVersion = null)
* @method PersonCivilityDetail|null findOneBy(array $criteria,array $orderBy = null)
* @method PersonCivilityDetail[] findAll()
* @method PersonCivilityDetail[] findBy(array $criteria,array $orderBy = null,$limit = null,$offset = null)
*/
class PersonCivilityDetailRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry,PersonCivilityDetail::class);
}
/**
* @param Person $person
* @return PersonCivility|null
* @throws NonUniqueResultException
*/
public function findCivility(Person $person): ?PersonCivility
{
return ($this->createqueryBuilder('personCivilityDetail')
->select('personCivility')
->join('personCivilityDetail.personCivility','personCivility')
->join('personCivilityDetail.person','person')
->where('personCivilityDetail.isActual = :personCivilityDetail_isActual')
->andWhere('person.id = :person_id')
->setParameters(['personCivilityDetail_isActual' => true,'person_id' => $person->getId()])
->getQuery()
->getoneOrNullResult()
);
}
}
这些是我的不同代码。当我执行 GET 操作时,我没有问题。当我执行 POST、PUT 或 PATCH 操作时,我遇到了问题。返回信息如下:
无法从序列化数据创建 App\Entity\Person 的实例,因为其构造函数需要存在参数“personCivilityDetailRepository”
我该怎么办?
另外,我想知道这种编码方式是否合适。你有更好的方法吗?
真诚的。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)