【问题标题】:Saving has_many records in SilverStripe在 SilverStripe 中保存 has_many 记录
【发布时间】:2013-07-31 00:53:57
【问题描述】:

我有一个DebatePage 有_many 投票:

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

以及对应的VoteDataObject

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

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

它的语法是什么?

我想做这样的事情:

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

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

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

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

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

    这意味着在您的DebatePage 上,Vote 关系称为Votes$belongs_to 仍然需要更改为 $has_one-relation。

    【讨论】:

    【解决方案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'
    ); 
    

    【讨论】:

    • 哦,好的。谢谢。所以 silverstripe 中没有 belongs_to 吗?
    • 这是一件好事,我认为它没有以好的方式记录下来。我还尝试将belongs_to 关系用于has_many 关系,但没有找到说明您应该仅将其用于has_one 的文档。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      相关资源
      最近更新 更多