gpt4 book ai didi

php - 使用非自动生成的 ID 链接两个实体

转载 作者:行者123 更新时间:2023-11-29 15:56:16 26 4
gpt4 key购买 nike

我正在做一个网站,客户端使用链接到生成数据的机器的 ID 连接到该网站。该机器将该数据发送到具有相同 ID 的 csv 文件中。我想在网站上显示数据,以便客户可以看到自己的数据,而不是其他人的数据。我用它们的属性创建了两个实体。在 Property 类中,我有 ManyToOne 关系,因为一个 User 可以有多个属性,而一个属性只能链接到一个用户。

属性类别:

/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="properties")
* @ORM\JoinColumn(nullable=false)
*/
private $user;

public function getUser(): ?User
{
return $this->user;
}

public function setUser(?User $user): self
{
$this->user = $user;

return $this;
}

用户类别:

private $username; /*This is the ID of the machine in User, people connect 
to the website with it*/

/**
* @ORM\OneToMany(targetEntity="App\Entity\Property", mappedBy="user")
*/
private $properties;

public function __construct()
{
$this->properties = new ArrayCollection();
}

用户中自动生成的 getter 和 setter:

public function getUsername(): ?string
{
return $this->username;
}

public function setUsername(string $username): self
{
$this->username = $username;

return $this;
}

用户中自动生成的属性方法:

/**
* @return Collection|Property[]
*/
public function getProperties(): Collection
{
return $this->properties;
}

public function addProperty(Property $property): self
{
if (!$this->properties->contains($property)) {
$this->properties[] = $property;
$property->setUser($this);
}

return $this;
}

public function removeProperty(Property $property): self
{
if ($this->properties->contains($property)) {
$this->properties->removeElement($property);
// set the owning side to null (unless already changed)
if ($property->getUser() === $this) {
$property->setUser(null);
}
}

return $this;
}

以下是我尝试使用 csv 类中的 ID 从 csv 文件获取数据的方法:

    /*Read csv file and put the result array in $results*/

foreach ($results as $row) {

$properties = (new Property)
->set/*Some properties*/
->setUser($row['user'])
->setDate(new \DateTime());

$this->em->persist($properties);
}
$this->em->flush();

显然,这不起作用,因为 $user 未初始化,并且我希望能够获取 ID 字符串而不是 $user 对象。问题是我不知道如何获取字符串并将其与用户链接。我是否只需要在 twig 文件中创建一个 if 语句来仅显示我想要的内容,或者是否有一个好的方法来做到这一点?

编辑

我尝试了一些东西,但它没有改变任何东西。我尝试在创建属性时将其链接到用户,但在渲染页面时它似乎没有执行任何操作。我仍然得到所有属性(property),而不仅仅是我应该得到的属性(property)。 (与用户具有相同 ID 的)。

这是代码

    $properties = (new Property)
->set/*Some properties*/
->setmachineId($row['machineId']) /*Changed this to string in entity class*/
->setDate(new \DateTime());

$this->em->persist($properties);
}

$users = $this->em->getRepository(User::class);
foreach($users as $user){
if($properties->getMachineId() === $user->getUsername()){
$user->addProperty($properties);
$properties->setUser($user);
}
}

$this->em->flush();

最佳答案

这个?

foreach ($results as $row) {

$properties = (new Property)
->set/*Some properties*/
->setUser($this->em->getReference(User, $row['user']))
->setDate(new \DateTime());

$this->em->persist($properties);
}
$this->em->flush();

documentation

关于php - 使用非自动生成的 ID 链接两个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56445871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com