基於https://github.com/wbraganca/yii2-dynamicform/wiki/Dynamic-Forms-With-Yii2-relation-trait-(VERY-EASY),我試圖實現動態forms.Create工作完美,但在Update窗體中,如果我刪除任何動態窗體元素,它是沒有被刪除,但如果我在更新操作中添加,它將被保存。 這是我更新的代碼Yii2 wbraganca-dynamicform更新使用yii2-relation-trait不刪除項目
public function actionUpdate($id)
{
$modelAlumni = $this->findModel($id);
$modelsJob = $modelAlumni->jobs;
if ($modelAlumni->loadAll(Yii::$app->request->post()) && $modelAlumni->saveAll()) {
return $this->redirect(['view', 'id' => $modelAlumni->id]);
} else {
return $this->render('update', [
'modelAlumni' => $modelAlumni,
'modelsJob' => (empty($modelsJob)) ? [new Job] : $modelsJob
]);
}
}
爲什麼不刪除?
這是我的校友模型
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "alumni".
*
* @property integer $id
* @property string $name
* @property integer $gender
* @property integer $contact_number
* @property string $year_graduated
* @property string $qualification
* @property integer $department_id
* @property integer $specialization
* @property string $email
*
* @property Job[] $jobs
*/
class Alumni extends \yii\db\ActiveRecord
{
use \mootensai\relation\RelationTrait;
public $organization;
public $designation;
public $location;
public $current_status;
public $joining_date;
/**
* @inheritdoc
*/
public static function tableName()
{
return 'alumni';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['name', 'gender', 'contact_number', 'year_graduated', 'qualification', 'department_id', 'specialization', 'email'], 'required'],
[['name', 'organization', 'designation', 'location'], 'string'],
[['gender', 'contact_number', 'department_id', 'specialization'], 'integer'],
[['year_graduated'], 'safe'],
[['qualification', 'email'], 'string', 'max' => 500],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => Yii::t('app', 'ID'),
'name' => Yii::t('app', 'Name'),
'gender' => Yii::t('app', 'Gender'),
'contact_number' => Yii::t('app', 'Contact Number'),
'year_graduated' => Yii::t('app', 'Year Graduated'),
'qualification' => Yii::t('app', 'Qualification'),
'department_id' => Yii::t('app', 'Department ID'),
'specialization' => Yii::t('app', 'Specialization'),
'email' => Yii::t('app', 'Email'),
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getJobs()
{
return $this->hasMany(Job::className(), ['alumni_id' => 'id']);
}
}
這是我的工作模式
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "job".
*
* @property integer $job_id
* @property string $organization
* @property string $current_status
* @property string $designation
* @property string $joining_date
* @property string $location
* @property integer $alumni_id
*
* @property Alumni $alumni
*/
class Job extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'job';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['organization', 'current_status', 'designation', 'joining_date', 'location', 'alumni_id'], 'required'],
[['organization'], 'string'],
[['joining_date'], 'safe'],
[['alumni_id'], 'integer'],
[['current_status', 'designation'], 'string', 'max' => 300],
[['location'], 'string', 'max' => 255],
[['alumni_id'], 'exist', 'skipOnError' => true, 'targetClass' => Alumni::className(), 'targetAttribute' => ['alumni_id' => 'id']],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'job_id' => Yii::t('app', 'Job ID'),
'organization' => Yii::t('app', 'Organization'),
'current_status' => Yii::t('app', 'Current Status'),
'designation' => Yii::t('app', 'Designation'),
'joining_date' => Yii::t('app', 'Joining Date'),
'location' => Yii::t('app', 'Location'),
'alumni_id' => Yii::t('app', 'Alumni ID'),
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getAlumni()
{
return $this->hasOne(Alumni::className(), ['id' => 'alumni_id']);
}
}
你需要做的這個你自己。如果loadAll和saveAll完成,則刪除需要刪除的模型。查看https://wbraganca.com/yii2extensions/dynamicform-demo1/source-code into actionUpdate()(搜索* deletedIDs *)。你會看到你必須爲自己的解決方案實施的刪除操作。考慮使用事務。 – robsch
https://github.com/wbraganca/yii2-dynamicform/wiki/Dynamic-Forms-With-Yii2-relation-trait-(VERY-EASY)使用另一種方法。它使用https://github.com/mootensai/yii2-relation-trait,他們認爲它更簡單 – user7282
你是對的。但我沒有使用這些庫,所以我不能幫你。你可以調試RelationTrait.php。 – robsch