【问题标题】:Persist object within entity在实体中持久化对象
【发布时间】:2014-03-07 09:29:53
【问题描述】:

我的问题很简单!

2 个实体:

/**
 * @ORM\Entity
 * @ORM\Table(name="tournament")
 */
class Tournament
{
    …
    …
    …

    /**
     * @ORM\OneToMany(targetEntity="Siriru\GSBundle\Entity\Match", mappedBy="tournament")
     */

    …

    protected $matches;

    public function start()
    {
        $this->addMatch(new Match());
    }
}

/**
 * @ORM\Entity
 * @ORM\Table(name="match")
 */
class Match
{

    /**
     * @ORM\ManyToOne(targetEntity="Siriru\GSBundle\Entity\Tournament", inversedBy="matches")
     * @ORM\JoinColumn(nullable=false)
     */
    protected $tournament;
}

我需要保留使用start() 函数创建的新匹配。是否可以 ?或者也许这是一种非常糟糕的方式。

谢谢!!

Siriru

【问题讨论】:

    标签: symfony doctrine-orm symfony-2.4


    【解决方案1】:

    cascade={"persist"} 添加到Tournament 类中$matches 属性的选项中。现在当你这样做时:

    $myTournament->start();
    $em->persist($myTournament);
    $em->flush();
    

    Doctrine 会在 DB 中自动创建匹配记录。

    【讨论】:

    • 还需要确保 Tournament::addMatch($match) 也调用 $match->setTournament($this)。
    • 是的,它可以工作,但在持久化期间:An exception occurred while executing 'INSERT INTO match (step, time1, time2, player1_id, player2_id, winner_id, type_id) VALUES (?, ?, ?, ?, ?, ?, ?)' with params [0, null, null, 1, 2, null, 53]: 显然我在正确的字段中设置了 nullable=true。 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
    • 这通常发生在更改实体后没有运行教义:模式:更新
    • 我一次又一次地测试我没有结果。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多