Doctrine, @oneToMany, но только с активированным полем

У меня есть организация для Компании и организация для проверки. Компания имеет несколько отзывов.

Когда я звоню company->getReviews()Я хочу, чтобы он вернул ТОЛЬКО обзор isValidated поле TRUE,

Как я могу сделать ? Какой способ лучше?

/**
* @ORM\Table(name="Company")
*/
class Company
{

/**
* @ORM\OneToMany(targetEntity="MyAppBundle\Entity\Review", mappedBy="company")
*/
protected $reviews;/**
* Add reviews
*
* @param \ProSearch\ReviewBundle\Entity\Review $reviews
* @return Company
*/
public function addReview(\ProSearch\ReviewBundle\Entity\Review $reviews)
{
$this->reviews[] = $reviews;

return $this;
}

/**
* Remove reviews
*
* @param \ProSearch\ReviewBundle\Entity\Review $reviews
*/
public function removeReview(\ProSearch\ReviewBundle\Entity\Review $reviews)
{
$this->reviews->removeElement($reviews);
}

/**
* Get reviews
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getReviews()
{
return $this->reviews;
}

}

And the review entity :

/**
* @ORM\Table()
* @ORM\Entity()
*/
class Review
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
protected $title;

/**
* @var string
*
* @ORM\Column(name="description", type="text")
*/
protected $description;/**
* @ORM\ManyToOne(targetEntity="MyAppBundle\Entity\Company")
*/
protected $company;/**
* @var boolean
*
* @ORM\Column(name="isValidated", type="boolean")
*/
protected $isValidated;

}

2

Решение

Если предположить, Company::$reviews это учение Collection,

Вы можете использовать метод фильтра на коллекции. Это дает новую коллекцию только с проверенными отзывами.

$companyObj->getReviews()->filter(function($review) {
return $review->isValidated();
});

Видя, как вы пометили это также с Symfony. Я бы посоветовал не изменять Company::getReviews() потому что он используется в формах при использовании коллекций, например. Это также может сбить с толку, когда другой разработчик хочет получить все отзывы от компании. призвание getReviews() не вернет результаты, ожидаемые разработчиком.

3

Другие решения

Дело в том, что компания-> getReviews () может использоваться доктриной. Вы должны создать новый метод:

public function getValidatedReviews() {

$validatedReviews = array();

foreach($this->getReviews() as $review {

if($review->getIsValidated())
$validatedReview[] = $review;
}

return $validatedReviews;
}
3

По вопросам рекламы [email protected]