使用TokenInput保存多对多关系

时间:2013-09-03 20:24:04

标签: yii yii-extensions jquery-tokeninput

帮助我,哦,Mighty Hive Mind。你是我唯一的希望。

我一直在为一个小型应用程序工作,我正在构建一个数据库(如图)。虽然我已经设法通过迭代数据来手动保存关系数据,为每个数据创建一个新模型,然后保存这些信息,我知道必须有一个比这更简洁的方法:

foreach($keys as $k) {
  //Build the model to associate with keyword $k
  $facts_keyword=new FactsKeyword;
  $facts_keyword['fact_id']=$model->id;
  $facts_keyword['keyword_id']=$k;
  if(!$facts_keyword->save()) //Check for errors on saving
    echo "FAILURE TO SAVE FACTS_KEYWORDS";
}

为了完成这项工作,我为表factskeywords之间的参考表建立了一个模型。参考表只有两列facts_idkeywords_id。我使用Yii的TokenInput插件输入与给定事实关联的关键字。相关的视图代码在这里:

<div id="keywords" class="row">
<?php echo $form->labelEx($keyword,'keywords'); ?>
<?php $this->widget('ext.tokeninput.TokenInput', array(
    'model'=>$keyword,
    'attribute'=>'name',
    'url'=>array('keyword/searchKeys'),
    'options' => array(
        'allowCreation'=>false,
        'preventDuplicates'=>true,
        'resultsFormatter'=>'js:function(item){ return "<li><p>" + item.name + "</p></li>" }',
        'prePopulate'=>$key,
        'theme'=>'facebook',
        'minChars'=>2,
    )
)); ?>
<?php echo $form->error($keyword,'name'); ?>
</div>

事实模型的关系如下:'keywords' => array(self::MANY_MANY, 'Keyword', 'facts_keywords(fact_id, keyword_id)')'

如何以更清洁的方式保存我视图中的信息?我尝试将'model'=>$keyword更改为'model'=>$fact并将'attribute'=>'name'更改为'attribute'=>'sources'这会出现此错误:trim() expects parameter 1 to be string, array given我做错了什么?

1 个答案:

答案 0 :(得分:0)

只需使用此扩展程序:activerecord-relation-behavior