StackExchange的长期被动用户,我在此处不知所措。这可能超级简单,但我卡住了。我已经使用gii-enhanced来建立模型和CRUD。Yii2 - 从更新表单更新另一个模型的单个字段
我有两个模型:ordenes和facturas。
当我更新facturas模型时,我可以将它链接到已有的 现有ordenes模型。
facturas模型可以链接到ordenes模型。
Ordenes有数量字段,因此facturas。
我现在有什么:我可以将facturas模型链接到已经存在的ordenes模型。一个facturas模型只能有一个ordenes模型,而ordenes模型可以有多个facturas模型链接到它。
我想达成的目标是,当我从facturas模型链接facturas模型到模型ordenes量从ordenes模型并保存到新价值的金额中扣除ordenes表。因此,如果我已经有一个金额为200000美元的ordenes模型,并且链接到该模型的金额为150000美元,则更新的或模型应该具有金额50000美元。
相关的代码在facturasController:
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->loadAll(Yii::$app->request->post()) && $model->saveAll()) {
return $this->redirect(['view', 'id' => $model->idfacturas]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
视图中的相关领域:
<?= $form->field($model, 'ordenes_idordenes')->widget(\kartik\widgets\Select2::classname(), [
'data' => \yii\helpers\ArrayHelper::map(\frontend\models\Ordenes::find()->orderBy('idordenes')->asArray()->all(), 'idordenes', 'numero'),
'options' => ['placeholder' => Yii::t('app', 'Vincular Orden de Compra')],
'pluginOptions' => [
'allowClear' => true
],
]); ?>
的facturas模型的相关部分:
/**
* @return \yii\db\ActiveQuery
*/
public function getOrdenesIdordenes()
{
return $this->hasOne(\frontend\models\Ordenes::className(), ['idordenes' => 'ordenes_idordenes'])->inverseOf('facturas');
}
/**
* @return \yii\db\ActiveQuery
*/
public function getProveedoresIdproveedores()
{
return $this->hasOne(\frontend\models\Proveedores::className(), ['idproveedores' => 'proveedores_idproveedores'])->inverseOf('facturas');
}
/**
* @return \yii\db\ActiveQuery
*/
/*public function getUserIduser()
{
return $this->hasOne(\frontend\models\User::className(), ['id' => 'user_iduser'])->inverseOf('facturas');
}*/
public function getUserIduser()
{
return $this->hasOne(\backend\models\User::className(), ['id' => 'user_iduser'])->inverseOf('facturas');
}
/**
* @return \yii\db\ActiveQuery
*/
public function getOrdenes()
{
return $this->hasMany(\frontend\models\Ordenes::className(), ['facturas_idfacturas' => 'idfacturas'])->inverseOf('facturasIdfacturas');
}
/**
* @return \yii\db\ActiveQuery
*/
public function getEstadosContab()
{
return $this->hasOne(\frontend\models\EstadosContab::className(), ['idcontab' => 'estados_contab'])->inverseOf('facturas');
}
/**
* @inheritdoc
* @return array mixed
*/
public function behaviors()
{
return [
'blameable' => [
'class' => BlameableBehavior::className(),
'createdByAttribute' => 'user_crea',
'updatedByAttribute' => 'user_modif',
],
'uuid' => [
'class' => UUIDBehavior::className(),
'column' => 'idfacturas',
],
];
}
/**
* @inheritdoc
* @return \frontend\models\FacturasQuery the active query used by this AR class.
*/
public static function find()
{
return new \frontend\models\FacturasQuery(get_called_class());
}
}
和相关的部件Ordenes模型:
/**
* @return \yii\db\ActiveQuery
*/
public function getFacturas()
{
return $this->hasMany(\frontend\models\Facturas::className(), ['ordenes_idordenes' => 'idordenes'])->inverseOf('ordenesIdordenes');
}
/**
* @return \yii\db\ActiveQuery
*/
public function getNotas()
{
return $this->hasMany(\frontend\models\Notas::className(), ['ordenes_idordenes' => 'idordenes'])->inverseOf('ordenesIdordenes');
}
/**
* @return \yii\db\ActiveQuery
*/
public function getEstado()
{
return $this->hasOne(\frontend\models\Estados::className(), ['idestados' => 'estado_id'])->inverseOf('ordenes');
}
/**
* @return \yii\db\ActiveQuery
*/
public function getNotasIdnotas()
{
return $this->hasOne(\frontend\models\Notas::className(), ['idnotas' => 'notas_idnotas'])->inverseOf('ordenes');
}
/**
* @return \yii\db\ActiveQuery
*/
public function getFacturasIdfacturas()
{
return $this->hasOne(\frontend\models\Facturas::className(), ['idfacturas' => 'facturas_idfacturas'])->inverseOf('ordenes');
}
/**
* @return \yii\db\ActiveQuery
*/
public function getProveedoresIdproveedores()
{
return $this->hasOne(\frontend\models\Proveedores::className(), ['idproveedores' => 'proveedores_idproveedores'])->inverseOf('ordenes');
}
/**
* @return \yii\db\ActiveQuery
*/
public function getTipocompra()
{
return $this->hasOne(\frontend\models\TipoCompra::className(), ['category_id' => 'tipocompra_id'])->inverseOf('ordenes');
}
/**
* @inheritdoc
* @return array mixed
*/
public function behaviors()
{
return [
'blameable' => [
'class' => BlameableBehavior::className(),
'createdByAttribute' => 'created_by',
'updatedByAttribute' => 'updated_by',
],
'uuid' => [
'class' => UUIDBehavior::className(),
'column' => 'idordenes',
],
];
}
/**
* @inheritdoc
* @return \frontend\models\OrdenesQuery the active query used by this AR class.
*/
public static function find()
{
return new \frontend\models\OrdenesQuery(get_called_class());
}
}
的事情是,**的** Facturas模型,首次创建时,没有一个相关的** **的订单模式。这是用户更新Facturas模型时创建的关系(通过选择框)。正是在这一点上,来自Facturas模型的** monto **(金额)应该从**新近相关的** Orders模型的monto中减去。所有来自Facturas模型的更新视图。 –
那么主模型是一个Fatcuras模型,并且提交返回也是订单模型的参考? – scaisEdge
实际上,设置是这样的:首先,创建一个Ordenes模型。后来Facturas模型也被创建。两者都有**金额**字段,详细说明该文件的价值。在某一点上,Facturas模型必须与Ordenes模型相关联。一个Ordenes模型可以有许多Facturas模型关系,而一个Facturas模型只能有一个Ordenes关系。这个想法是,当Facturas模型通过选择框链接到Ordenes模型时,Facturas和Ordenes模型必须更新,但是在不同的属性上(Fadeuras的Ordenes FK,Ordenes的数量) –