上下文
我有一个User实体,其中有一个Team和Team,可以拥有多个用户。 我试图获取一个团队并获取与之关联的用户列表。
用户实体
<?php
namespace Enterprise\PortailBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* User entity class
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="Enterprise\PortailBundle\Repository\TeamRepository")
* @category Entity
* @package Entity
*/
class User
{
/*
* Relationship Mapping Metadata
*/
public function __toString()
{
return $this->firstName . ' - ' . $this->lastName . ' - ' . $this->enterprise . ' - ' . $this->team;
}
/**
* @ORM\ManyToOne(targetEntity="Team", inversedBy="users")
* @ORM\JoinColumn(name="team_id", referencedColumnName="id")
*/
private $team;
/*
* Autogenerated methods / variables
*/
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @Assert\Length(min=2, minMessage="Le prénom de l'utilisateur doit être supérieur à 2 caractères.")
* @Assert\Length(max=32, maxMessage="Le prénom de l'utiisateur doit être inférieur à 32 caractères.")
* @ORM\Column(name="firstName", type="string", length=32)
*/
private $firstName;
/**
* @var string
*
* @Assert\Length(min=2, minMessage="Le nom de l'utilisateur doit être supérieur à 2 caractères.")
* @Assert\Length(max=64, maxMessage="Le nom de l'utilisateur doit être inférieur à 64 caractères.")
* @ORM\Column(name="lastName", type="string", length=64)
*/
private $lastName;
/**
* @var string
*
* @Assert\Length(min=2, minMessage="Le nom de l'entreprise doit être supérieur à 2 caractères.")
* @Assert\Length(max=64, maxMessage="Le nom de l'entreprise doit être inférieur à 64 caractères.")
* @ORM\Column(name="enterprise", type="string", length=64)
*/
private $enterprise;
/**
* @Assert\File(mimeTypes={ "image/jpeg", "image/jpg", "image/png" })
* @ORM\Column(name="image", type="string")
*/
private $image;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set firstName
*
* @param string $firstName
*
* @return User
*/
public function setFirstName($firstName)
{
$this->firstName = $firstName;
return $this;
}
/**
* Get firstName
*
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* Set lastName
*
* @param string $lastName
*
* @return User
*/
public function setLastName($lastName)
{
$this->lastName = $lastName;
return $this;
}
/**
* Get lastName
*
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* Set enterprise
*
* @param string $enterprise
*
* @return User
*/
public function setEnterprise($enterprise)
{
$this->enterprise = $enterprise;
return $this;
}
/**
* Get enterprise
*
* @return string
*/
public function getEnterprise()
{
return $this->enterprise;
}
/**
* Set image
*
* @param string $image
*
* @return User
*/
public function setImage($image)
{
$this->image = $image;
return $this;
}
/**
* Get image
*
* @return string
*/
public function getImage()
{
return $this->image;
}
/**
* Set team
*
* @param Team $team
*
* @return User
*/
public function setTeam(Team $team)
{
$this->team = $team;
return $this;
}
/**
* Get team
*
* @return Team
*/
public function getTeam()
{
return $this->team;
}
}
团队实体
<?php
namespace Enterprise\PortailBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Team entity class
*
* @ORM\Table(name="team")
* @ORM\Entity(repositoryClass="Enterprise\PortailBundle\Repository\TeamRepository")
* @category Entity
* @package Entity
*/
class Team
{
public function __toString()
{
return $this->name . ' - ' . $this->role;
}
/**
* @ORM\OneToMany(targetEntity="User", mappedBy="team")
*/
private $users;
public function __construct()
{
$this->users = new ArrayCollection();
}
/*
* Autogenerated methods / variables
*/
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @Assert\Length(min=2, minMessage="Le nom de l'équipe doit être supérieur à 2 caractères.")
* @Assert\Length(max=64, maxMessage="Le nom de l'équipe doit être inférieur à 64 caractères.")
* @ORM\Column(name="name", type="string", length=64)
*/
private $name;
/**
* @var string
*
* @Assert\Length(min=2, minMessage="Le role de l'équipe doit être supérieur à 2 caractères.")
* @Assert\Length(max=64, maxMessage="Le role de l'équipe doit être inférieur à 64 caractères.")
* @ORM\Column(name="role", type="string", length=64)
*/
private $role;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Team
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Get users
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getUsers()
{
return $this->users;
}
/**
* Set role
*
* @param string $role
*
* @return Team
*/
public function setRole($role)
{
$this->role = $role;
return $this;
}
/**
* Get role
*
* @return string
*/
public function getRole()
{
return $this->role;
}
}
学说版
2.5.14
数据库
在我的控制器中,我从用户到团队时成功获取信息
$user = $this->getDoctrine()->getRepository(User::class)->find(6);
dump($user);
$teamName = $user->getTeam()->getName();
dump($teamName);
但相反并没有给我返回用户列表
$team = $this->getDoctrine()->getRepository(Team::class)->find(1);
dump($team);
$users = $team->getUsers();
dump($users);
所以我的问题是为什么$users = $team1->getUsers();
没有返回用户列表?
由于
答案 0 :(得分:1)
可能出于效率原因,似乎Symfony在您请求数据之前不会填充数据。
试试这个,您应该看到该集合不再是空的,并且您实际上可以从团队中访问用户数据:
$team = $this->getDoctrine()->getRepository(Team::class)->find(1);
dump($team);
$users = $team->getUsers();
dump($users); // #collection: ArrayCollection is not empty anymore
$firstName = $users[0]->getFirstName();
dump($firstName);
答案 1 :(得分:0)
<div class="section-1">
</div>
<div class="section-2">
<div class="col">
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Harum voluptatem beatae quia facilis nobis, dolore quidem nostrum! Blanditiis eveniet dolor a, laudantium repudiandae rem commodi ea adipisci. Eius, obcaecati rerum.</p>
</div>
<div class="col col-img">
<img src="http://via.placeholder.com/650x650" alt="">
</div>
</div>
将团队中的用户保存为数组集合 你的关系是完美的 你有错误的业务逻辑