我正在做一个网站,客户端在该网站上使用ID链接到该网站,该ID链接到生成数据的计算机。本机将数据发送到具有相同ID的csv文件中。我想在网站上显示数据,以便客户端可以看到他们自己的数据,而不是其他人。我用它们的属性创建了两个实体。在Property类中,由于一个User可以具有多个属性,而一个属性只能链接到一个用户,因此我具有ManyToOne关系。
属性类:
/**
* @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();
}
用户中自动生成的吸气剂和吸气剂:
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对象。问题是我不知道如何获取字符串并将其与用户链接。我是否只需要在树枝文件中创建一个if语句即可仅显示我想要的内容,或者有什么好方法吗?
修改
我尝试了一些东西,但没有任何改变。我尝试在创建属性时将其链接到User,但是在渲染页面时似乎没有任何作用。我仍然拥有所有财产,而不仅仅是我应该拥有的财产。 (与用户具有相同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();
答案 0 :(得分:0)
这吗?
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();
答案 1 :(得分:0)
我不知道是否有可能,所以我只是在模板中放置了一些if语句,它就这样工作。它不那么优雅,但很好。如果有人有更好的主意,请告诉我!