iam试图从表单中保存模型,该关系通过结表定义关系,但由于该属性是关系对象,因此它是只读的,并且在验证时失败。具有关系属性的Yii2保存模型
型号的关系:
public $payer
/**
* @return \yii\db\ActiveQuery
*/
public function getPayerRelationship()
{
return $this->hasMany(PartyRelationship::className(), ['contract_id' => 'id'])->where(['relationship' => 'P']);
}
public function getPayers(){
return $this->hasMany(ContractingParty::className(), ['id' => 'contracting_party_id'])
->via('payerRelationship');
}
public function getContractors() { // could be a static func as well
$model = ContractingParty::find()->asArray()->all();
return ArrayHelper::map($model, 'id', 'subject_name');
}
表单视图:
<?= $form->field($model, 'payers')->widget(Select2::classname(), [
'data' => $model->getContractors(),
'language' => 'en',
'options' => ['placeholder' => '-- Select company --'],
'pluginOptions' => [
'allowClear' => true,
'multiple' => true,
],
'showToggleAll' => false
]) ?>
它不会证实或保存,因为只读属性纳税人。我尝试在$ form-> field中使用不同的属性($ model,'payer'...(而不是付款人),然后验证工作甚至保存工作,但麻烦在于,该编辑没有该模型的预选值,因为他们是在模型 - >付款人,我不知道,我应该通过这里,而不是这个关系对象(或一般模型的属性)
也许iam明显失明,但在手册中有一个。很多有关从数据库中获取数据,但几乎没有关于拯救的信息 (顺便说一句,我看到这个帖子:Yii2 Invalid Call: Setting read-only property - 但没有给我任何新资料片的话)。
是我的表单设计错误,或模型设计(意思我应该只使用两个模型创建表单域)?谢谢
在您的代码中,“付款人”是一种定义的关系,而不是属性或数据库行。如果一个模型正确地使用了值,你可以简化$ model-> save()。它是有据可查的[ActiveRecord](http://www.yiiframework.com/doc-2.0/guide-db-active-record.html) – R13e