在SilverStripe中保存has_many记录

时间:2013-07-31 00:53:57

标签: silverstripe

我有一张DebatePage,其中有很多票:

static $has_many = array(
    'Votes' => 'Vote'
);  

以及相应的Vote DataObject

static $belongs_to = array(
    'DebatePage' => 'DebatePage'
);

当用户点击“是”时,我想保存该页面的投票。

这是什么语法?

我希望做这样的事情:

$this->dataRecord->Votes()->add($array('motion' => true));

我该如何正确地做到这一点?

3 个答案:

答案 0 :(得分:7)

类似于@ 3dgoo所写的但使用不同的语法,利用::create()

$vote = Vote::create(array(
    'Motion' => true
));
$this->Votes()->add( $vote );

这意味着在DebatePage Vote关系被称为投票$belongs_to仍需要更改为$has_one - 关系。

答案 1 :(得分:2)

这是在数据库中创建新投票的功能:

public function SubmitVote() {
    $vote = new Vote();
    $vote->DebatePageID = $this->ID;
    $vote->Motion = true;
    $vote->write();
}

请注意,您的Vote DataObject应该$has_one关系回DebatePage而不是$belongs_to

static $has_one = array(
    'DebatePage' => 'DebatePage'
); 

答案 2 :(得分:0)

如果需要,您可以手动将对象添加到has_many,但它已经自动完成。如果您使用$ object-> ForreignID = $ hasOneObject-> ID,后跟$ form-> saveInto($ object),它会自动将对象添加到has_many关系。