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