Кажется, что не существует решения вашей проблемы, которое Doctrine могла бы решить автоматически.
Поскольку @ficuscr уже предоставил вам решение для запросов, есть еще одна вещь, которую нужно решить - проверитьдополнительных критериев и вернуть экземпляр Customer в получателе в случае успеха и NULL в случае невыполнения дополнительных критериев.
class Cart
{
const VALUE = '<some_constant_value>';
/**
* @OneToOne(targetEntity="Customer", inversedBy="cart")
* @JoinColumn(name="customer_id", referencedColumnName="id")
*/
private $customer;
// ...
/**
* @return Customer|null
*/
public function getCustomer()
{
if ($this->customer->getField1() <= self::VALUE
&& $this->customer->getField2() >= self::VALUE
) {
return $this->customer;
}
return null;
}
}
Если это было отношение «один ко многим», API фильтрации коллекций (aka Criteria) можно использовать для фильтрации коллекции, созданной сопоставлениями:
use Doctrine\Common\Collections\Criteria;
class Cart
{
const VALUE = '<some_constant_value>';
/**
* @OneToMany(targetEntity="Customer", mappedBy="cart")
*/
private $customers;
// ...
/**
* @return Customer[]|ArrayCollection
*/
public function getCustomers()
{
$expr = Criteria::expr();
$criteria = Criteria::create()
->where($expr->andX(
$expr->lte('field1', self::VALUE),
$expr->gte('field2', self::VALUE)
));
return $this->patientProblems->matching($criteria);
}
}