Symfony在ArrayCollection上迭代
在我的应用程序中,我有2个实体;用户和预订 预订实体:Symfony在ArrayCollection上迭代,symfony,doctrine-orm,Symfony,Doctrine Orm,在我的应用程序中,我有2个实体;用户和预订 预订实体: namespace App\Entity; /** * @ORM\Table(name="booking") * @ORM\Entity(repositoryClass="App\Repository\BookingRepository") */ class Booking { /** * @ORM\Column(type="boolean") * @Assert\NotBlank() */ private $isActive
namespace App\Entity;
/**
* @ORM\Table(name="booking")
* @ORM\Entity(repositoryClass="App\Repository\BookingRepository")
*/
class Booking
{
/**
* @ORM\Column(type="boolean")
* @Assert\NotBlank()
*/
private $isActive;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="bookings")
*/
private $user;
用户实体:
/**
* @ORM\Table(name="app_user")
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @UniqueEntity(fields="email", message="This email address is already in use")
*/
class User implements AdvancedUserInterface
{
/**
* @ORM\Column(type="string", length=255, unique=true)
* @Assert\NotBlank()
* @Assert\Email()
*/
private $email;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Booking", mappedBy="user")
* @Expose
*/
private $bookings;
/**
* User constructor.
*/
public function __construct()
{
$this->bookings = new ArrayCollection();
}
我尝试向我的用户实体添加一个返回活动预订的函数,我尝试了以下操作:
/**
* @return mixed
*/
public function getActiveBooking()
{
foreach( $this->bookings as $booking ) {
if( $booking->getIsActive() ) {
return $booking;
}
}
}
但是我得到了以下错误:错误:在null上调用成员函数getRoom()
当我使用
$user->getActiveBooking()->getRoom()->getId()调用它时
您是否尝试过这样添加joinColumn:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="bookings")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
*/
private $user;
确保与您一起工作的用户具有活动预订
getActiveBooking()
返回null,因为用户似乎没有活动预订
这就是为什么在
null
上无法调用getRoom()
的原因,因为前面的函数返回了null
谢谢您的回复,但是$user关系已经存在于预订实体中。你试过看你的假设是否正确吗?foreach($this->bookings as$booking){if($booking->getIsActive()){die(“至少正确一次”);}}谢谢,我已经检查了数据库,并且is_active字段设置为1,用户id与您使用的用户id相同?您是否尝试过dump
ing用户并检查关联?