У меня есть организация для Компании и организация для проверки. Компания имеет несколько отзывов.
Когда я звоню 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;
}
Если предположить, Company::$reviews
это учение Collection
,
Вы можете использовать метод фильтра на коллекции. Это дает новую коллекцию только с проверенными отзывами.
$companyObj->getReviews()->filter(function($review) {
return $review->isValidated();
});
Видя, как вы пометили это также с Symfony. Я бы посоветовал не изменять Company::getReviews()
потому что он используется в формах при использовании коллекций, например. Это также может сбить с толку, когда другой разработчик хочет получить все отзывы от компании. призвание getReviews()
не вернет результаты, ожидаемые разработчиком.
Дело в том, что компания-> getReviews () может использоваться доктриной. Вы должны создать новый метод:
public function getValidatedReviews() {
$validatedReviews = array();
foreach($this->getReviews() as $review {
if($review->getIsValidated())
$validatedReview[] = $review;
}
return $validatedReviews;
}