如何在yii2中的单个表中多次插入属性值

如何在yii2中的单个表中多次插入属性值,yii2,Yii2,我有一个叫塔鲁卡的模特。我应该选择地区,并为该特定地区输入尽可能多的Taluka。一切都正常,但当我输入多个taluka时,只有最后一个taluka保存在数据库表中。我还尝试了中给出的解决方案 但我收到的错误是“对数组上的成员函数isAttributeRequired()的调用” 型号: <?php namespace app\models; use Yii; /** * This is the model class for table "taluka". * */ cla

我有一个叫塔鲁卡的模特。我应该选择地区,并为该特定地区输入尽可能多的Taluka。一切都正常,但当我输入多个taluka时,只有最后一个taluka保存在数据库表中。我还尝试了中给出的解决方案

但我收到的错误是“对数组上的成员函数isAttributeRequired()的调用”

型号:

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "taluka".
 *

*/

class Taluka extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */


public $talukas=[];

public static function tableName()
{
    return 'taluka';
}

/**
 * @inheritdoc
 */
public function rules()
{
    return [
        [['DistrictId', 'Taluka'], 'required'],
        [['DistrictId'], 'integer'],
        [['talukas'], 'required'],
        [['Taluka'], 'string', 'max' => 100],
        [['DistrictId'], 'exist', 'skipOnError' => true, 'targetClass' => District::className(), 'targetAttribute' => ['DistrictId' => 'DistrictId']],
    ];
}

/**
 * @inheritdoc
 */
public function attributeLabels()
{
    return [
        'TalukaId' => 'Taluka ID',
        'DistrictId' => 'District',
        'talukas' => 'Taluka',
    ];
}


/**
 * @return \yii\db\ActiveQuery
 */
 public function getDistrict()
 {
     return $this->hasOne(District::className(), ['DistrictId' => 'DistrictId']);
  }
}

次区

首先,让我们了解为什么出现错误
“对数组上的成员函数isAttributeRequired()的调用”
。原因在于
规则
方法:

public function rules()
{
    return [
        [['DistrictId', 'Taluka'], 'required'],
        [['DistrictId'], 'integer'],
        [['talukas'], 'required'],// <-- This line causes an error. Reqired filed in ActiveRecord model could not be an array.
        [['Taluka'], 'string', 'max' => 100],
        [['DistrictId'], 'exist', 'skipOnError' => true, 'targetClass' => District::className(), 'targetAttribute' => ['DistrictId' => 'DistrictId']],
    ];
}

我假设
TalukaId
是一个自动递增主键。保存所有记录后,它会将您重定向到上次创建的taluka。

请提供一个代码示例来说明您的问题。我想我的答案解决了这个问题。堆栈溢出。尝试一步一步地执行类似于
actionCreate()
的操作,每次都检查模型的运行情况。
<?php

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use app\models\District;
use yii\helpers\ArrayHelper;
use unclead\multipleinput\MultipleInput;

/* @var $this yii\web\View */
/* @var $model app\models\Taluka */
/* @var $form yii\widgets\ActiveForm */
?>


<div class="taluka-form">

   <?php $form = ActiveForm::begin(['id' => 'dynamic-form', 'layout' => 'horizontal',
    'fieldConfig' => [
        'template' => "{label}\n{beginWrapper}\n{input}\n{hint}\n{error}\n{endWrapper}",
        'horizontalCssClasses' => [
           'label' => 'col-sm-5',
            //'offset' => 'col-sm-offset-2',
            //'wrapper' => 'col-sm-7',
            'error' => '',
            'hint' => '',

        ],
    ],]);?>

<div class="panel panel-primary " > 
<div class="panel panel-heading"><font size="3"><b>Taluka</b></font></div>
<div class="row">
<div class="col-sm-5">

    <?= $form->field($model, 'DistrictId')->dropDownList(ArrayHelper::map(District::find()->all(),'DistrictId','District'), ['prompt' => 'Select District']) ?>
</div>
</div>


<div class="row">
<div class="col-sm-5">

<?php 


echo $form->field($model, 'talukas')->widget(MultipleInput::className(), [
        'max'               => 500,
        'min'               => 1, // should be at least 2 rows
        'allowEmptyList'    => false,
        //'enableGuessTitle'  => true,
        //'addButtonPosition' => MultipleInput::POS_HEADER // show add button in the header
    ]);

?>

</div>
</div>


</div>





    <div class="form-group">
        <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
    </div>

    <?php ActiveForm::end(); ?>

</div>
public function rules()
{
    return [
        [['DistrictId', 'Taluka'], 'required'],
        [['DistrictId'], 'integer'],
        [['talukas'], 'required'],// <-- This line causes an error. Reqired filed in ActiveRecord model could not be an array.
        [['Taluka'], 'string', 'max' => 100],
        [['DistrictId'], 'exist', 'skipOnError' => true, 'targetClass' => District::className(), 'targetAttribute' => ['DistrictId' => 'DistrictId']],
    ];
}
public function actionCreate()
{
    $model = new Taluka();
    if ($model->load(Yii::$app->request->post())) {

        $talukaList = $model->talukas;

        if (is_array($talukaList)) {
            foreach ($talukaList as $taluka) {
                $talukaRecord = new Taluka();
                $talukaRecord->DistrictId = $model->DistrictId;
                $talukaRecord->Taluka = $taluka;
                $talukaRecord->save();
            }
        }
        return $this->redirect(['view', 'id' => $talukaRecord->TalukaId]);
    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }
}