0

存続期間中に別のテーブルに移動するエンティティがあります。そのようです:

村には多くのユニットが含まれています マップ上の軍隊の移動には多くのユニットが含まれています 攻撃後、ログ ファイルには多くのユニットが含まれています (余分な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;

}
4

1 に答える 1