Я занимаюсь веб-сайтом, на котором клиенты подключаются к нему с идентификатором, который связан с машиной, которая генерирует данные.Эта машина отправляет эти данные в CSV-файл с тем же идентификатором.Я хочу показать данные на веб-сайте, чтобы клиент мог видеть свои собственные данные, а не другие.Я создал свои две сущности с их свойствами.В классе Property у меня есть отношение 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();
}
Автоматически сгенерированные геттеры и установщики в User:
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
Автоматически сгенерированное свойствометоды в User:
/**
* @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 с идентификатором в моем классе 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 не инициализирован, и я хочу иметь возможность получить строку идентификатора вместо объекта $ user.Проблема в том, что я не знаю, как получить строку и связать ее с пользователем.Должен ли я просто сделать оператор if в файле ветки, чтобы показать только то, что я хочу, или есть хороший способ сделать это?
Редактировать
Я пыталсячто-то, но это ничего не изменило.Я пытался связать свойство с пользователем при его создании, но, похоже, он ничего не делает при рендеринге страницы.Я по-прежнему получаю все имущество, а не только то, которое мне полагается.(те, которые имеют тот же идентификатор, что и пользователь).
Вот код
$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();