0

私は2つのエンティティを持っています

/**
 * @ORM\Entity(repositoryClass="FLI\ContractBundle\Repository\CarrierFuelRepository")
 * @ORM\Table(name="carrier_fuel")
 */
class CarrierFuel
{
    /**
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     */
    protected $title;

    /**
     * @ORM\ManyToOne(targetEntity="FuelIndex")
     */
    protected $index;

    /**
     * @ORM\OneToMany(targetEntity="FuelLine", mappedBy="carrier_fuel",  cascade={"persist", "remove"})
     */
    protected $fuel_lines;
    }


/**
 * @ORM\Entity(repositoryClass="FLI\ContractBundle\Repository\FuelLineRepository")
 * @ORM\Table(name="fuel_line")
 */
class FuelLine
{
    /**
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="CarrierFuel", inversedBy="fuel_lines")
     */
    protected $carrier_fuel;
}

そして、これは私のフォームハンドラーのコードです:

public function process(CarrierFuel $fuel)
{
    $this->form->setData($fuel);
    if ('POST' === $this->request->getMethod())
    {
        $this->form->bind($this->request);
        if ($this->form->isValid())
        {
            $this->em->persist($fuel);
            $this->em->flush();
            return true;
        }
    }
    return false;
}

私が抱えている問題は、所有側(fuel_line)で外部キー(carrier_fuel_id)を設定していないことです。上記のプロセス メソッドを実行すると、このエラーが発生します。

An exception occurred while executing 'INSERT INTO fuel_line (id, min, max, ltl_surcharge, carrier_fuel_id) VALUES (?, ?, ?, ?, ?)' with params [14, "4", "4", "4", null]:

SQLSTATE[42703]: Undefined column: 7 ERROR: column "carrier_fuel_id" of relation "fuel_line" does not exist
LINE 1: ...SERT INTO fuel_line (id, min, max, ltl_surcharge, carrier_fu...

(編集) Carrier_fuel id を設定するように setFuelLine セッターを更新しましたが、実際にcarrier_fuel 行を挿入する前に、fuel_line を保存しようとしているようです。

パラメータ [26, "4", "4", "4", 29]:

SQLSTATE[42703]: 未定義の列: 7 エラー: リレーション "fuel_line" の列 "carrier_fuel_id" が存在しません LINE 1: ...SERT INTO fuel_line (id, min, max, ltl_surcharge,carrier_fu...

4

2 に答える 2

2

CarrierFuel エンティティから referencedColumnName を定義する必要があります。ドキュメントを調べると、次の例が見つかりました。

/**
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
     * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
     */

したがって、あなたの場合、FuelLine エンティティの注釈は次のようになります。

/**
     * @ORM\ManyToOne(targetEntity="CarrierFuel", inversedBy="fuel_lines")
     * @ORM\JoinColumn(name="carrier_fuel_id", referencedColumnName="id")
     */
protected $carrier_fuel;
于 2013-07-25T22:44:19.463 に答える