存続期間中に別のテーブルに移動するエンティティがあります。そのようです:
村には多くのユニットが含まれています マップ上の軍隊の移動には多くのユニットが含まれています 攻撃後、ログ ファイルには多くのユニットが含まれています (余分なamount_killed
列があります)
とにかく、これUnit
は私がエンティティと見なすものであり、テーブルと外部キーを介して村、移動、またはログにアタッチできます。
Doctrineには、これはエンティティであり、複数のテーブルへの外部キーとして使用できると言う方法があると思います。問題は、ユニットを自分の村から引き抜いてムーブメントに入れたいのですが、それらは同じアイテムとして定義されていないため、壊れてしまいます。
現在使用している私のコードは、エンティティを別のテーブルに転送するために次のようになります。
$villageUnits = $village->getVillageUnits();
$movementUnits = new ArrayCollection();
foreach ($villageUnits as $villageUnit) {
$movementUnit = new MovementUnit();
$movementUnit
->setLevel($villageUnit->getLevel());
->setAmount($villageUnit->getAmount());
->setUnitType($villageUnit->getUnitType());
$movementUnits->add($movementUnit);
}
現時点では、それらはすべてDoctrineで次のように定義された個別のエンティティです:
TABLES
village_units
---------
id, village_id, unit_type_id, amount, level
movement_units
---------
id, movement_id, unit_type_id, amount, level
log_units
---------
id, log_id, unit_type_id, amount, amount_killed, level
ENTITIES
/**
* MovementUnit
*
* @ORM\Table(name="movement_units")
* @ORM\Entity
*/
class MovementUnit
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Id
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="amount", type="integer", nullable=false)
*/
private $amount;
/**
* @var integer
*
* @ORM\Column(name="level", type="integer", nullable=false)
*/
private $level;
/**
* @var Movement
*
* @ORM\ManyToOne(targetEntity="Movement")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="movement_id", referencedColumnName="id")
* })
*/
private $movement;
/**
* @var UnitType
*
* @ORM\OneToOne(targetEntity="UnitType")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="unit_type_id", referencedColumnName="id")
* })
*/
private $unitType;
}
/**
* VillageUnit
*
* @ORM\Table(name="village_units")
* @ORM\Entity
*/
class VillageUnit
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Id
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="amount", type="integer", nullable=false)
*/
private $amount;
/**
* @var integer
*
* @ORM\Column(name="level", type="integer", nullable=false)
*/
private $level;
/**
* @var Village
*
* @ORM\ManyToOne(targetEntity="Village")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="village_id", referencedColumnName="id")
* })
*/
private $village;
/**
* @var UnitType
*
* @ORM\OneToOne(targetEntity="UnitType")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="unit_type_id", referencedColumnName="id")
* })
*/
private $unitType;
}
/**
* LogUnit
*
* @ORM\Table(name="log_units")
* @ORM\Entity
*/
class LogUnit
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\Id
*/
private $id;
/**
* @var integer
*
* @ORM\Column(name="amount", type="integer", nullable=false)
*/
private $amount;
/**
* @var integer
*
* @ORM\Column(name="dead", type="integer", nullable=false)
*/
private $dead;
/**
* @var integer
*
* @ORM\Column(name="level", type="integer", nullable=false)
*/
private $level;
/**
* @var LogArmy
*
* @ORM\ManyToOne(targetEntity="LogArmy")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="log_army_id", referencedColumnName="id")
* })
*/
private $logArmy;
/**
* @var UnitType
*
* @ORM\OneToOne(targetEntity="UnitType")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="unit_type_id", referencedColumnName="id")
* })
*/
private $unitType;
}