У меня проблема с правильной настройкой отображения Doctrine.Доктрина 2 многократная?
У меня есть CashRegister
Объект, у которого есть место для мусора и место для возврата. Оба местоположения относятся к одному типу (BinLocation
Entity).
исходящих из CashRegister
, CashRegister->getBinLocations()
и CashRegister->getReturnBinLocations()
работает отлично, но как я могу добиться того, что BinLocation->getCashRegisters()
возвращает все CashRegister
сущностей, которые ссылаются (binLocation
+ returnBinLocation
)?
/**
* CashRegister
*
* @ORM\Table(name="cash_registers")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class CashRegister
{
...
/**
* @var BinLocation
*
* @ORM\ManyToOne(targetEntity="BinLocation", inversedBy="cashRegisters")
* @ORM\JoinColumn(name="bin_location_id", referencedColumnName="id")
*/
private $binLocation;
/**
* @var BinLocation
*
* @ORM\ManyToOne(targetEntity="BinLocation", inversedBy="cashRegisters")
* @ORM\JoinColumn(name="return_bin_location_id", referencedColumnName="id")
*/
private $returnBinLocation;
/**
* @return BinLocation
*/
public function getBinLocation()
{
return $this->binLocation;
}
/**
* @return BinLocation
*/
public function getReturnBinLocation()
{
return $this->returnBinLocation;
}
...
}
/**
* BinLocation
*
* @ORM\Table(name="bin_locations")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
*/
class BinLocation
{
...
/**
* @var CashRegister[]
*
* @ORM\OneToMany(targetEntity="CashRegister", mappedBy="binLocation") <= Here is the problem, in this case mappedBy need to be an array [binLocation, returnBinLocation]
*/
private $cashRegisters;
/**
* @return CashRegister[]
*/
public function getCashRegisters()
{
return $this->cashRegisters;
}
...
}
Спасибо Марку за ваш ответ, но это решение выглядит как взломать. После долгого знакомства (до того, как я написал этот вопрос), я заметил, что только у немногих людей была та же проблема. Может быть, есть еще один способ реализовать его в более «доктрине»? (классы, таблицы, все может быть изменено, единственное требование состоит в том, что я могу сохранить местоположение бина и место для возврата в кассовый аппарат и вернуть их обратно) – ipsum
Проблема возникает из-за того, что вы не можете указать несколько 'mappedBy 'полей. Таким образом, вам нужно решить проблему с помощью других функций, которые предлагает Doctrine, пример, предлагаемый выше. Если вы хотите, чтобы основные функциональные изменения Doctrine, возможно, попросили просить их в Github? На этом этапе, однако, все решения, которые вы получите, будут «хаки» :) – Mark