Javascript 同一ActiveForm yii2上的多个模型
在同一表格上有多个模型 我不想在两个模型上都保存数据,但我只想在视图文件上显示一个变量 我有两张桌子Javascript 同一ActiveForm yii2上的多个模型,javascript,php,yii2,yii2-advanced-app,Javascript,Php,Yii2,Yii2 Advanced App,在同一表格上有多个模型 我不想在两个模型上都保存数据,但我只想在视图文件上显示一个变量 我有两张桌子 组织者和活动 组织者将登录并创建活动 现在,在这两个表中几乎没有共同的字段 因此,当用户登录时,单击创建事件按钮,我想在表单上显示组织者表格中的地址 这就是我到目前为止所做的 这可能不是正确的方法 所以,让我知道,如果可以实现任何其他更简单的方式 public function actionCreate() { $model = new Event(); $model2 = $
组织者
和活动
组织者将登录并创建活动
现在,在这两个表中几乎没有共同的字段
因此,当用户登录时,单击创建事件
按钮,我想在表单上显示组织者
表格中的地址
这就是我到目前为止所做的
这可能不是正确的方法
所以,让我知道,如果可以实现任何其他更简单的方式
public function actionCreate()
{
$model = new Event();
$model2 = $this->findModel2(Yii::$app->user->id);
if ($model->load(Yii::$app->request->post())) {
if($_POST['User']['address'] == null)
{
$model->location = $model2->address;
}
else{
$model->location = $_POST['User']['address'];
}
$model->is_active = 1 ;
$model->save();
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
'model2' => $model2
]);
}
}
protected function findModel2($id)
{
if (($model2 = User::findOne($id)) !== null) {
return $model2;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
这是我的\u form.php
代码
<?php $form = ActiveForm::begin([
'options' => [
'id' => 'create-event-form'
]
]); ?>
<?= $form->field($model, 'interest_id')->dropDownList(
ArrayHelper::map(Areaintrest::find()->all(),'id','area_intrest'),
['prompt'=> 'Select Event Category']
) ?>
<?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
<?php
if ($model->isNewRecord){
echo $form->field($model2,'address')->textInput(['class' => 'placepicker form-control'])->label('Location');
}
else
echo $form->field($model,'location')->textInput(['class' => 'placepicker form-control']);
?>
<di"form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-danger' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
错误页面会这样说
Unknown Property – yii\base\UnknownPropertyException
Getting unknown property: common\models\Event::address
这是我的事件
模型
class Event extends \yii\db\ActiveRecord
{
public static function tableName()
{
return 'event';
}
public function rules()
{
return [
[['organiser_id', 'interest_id', 'title', 'location'], 'required'],
[['organiser_id', 'interest_id'], 'integer'],
[['title', 'location'], 'string', 'max' => 255],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'organiser_id' => 'Organiser ID',
'interest_id' => 'Event Type',
'title' => 'Event Title',
'location' => 'Location'
];
}
public function getOrganiser()
{
return $this->hasOne(User::className(), ['organiser_id' => 'organiser_id']);
}
}
这是我的用户
模型代表组织者
表格和前端模型中的模型名SignUp.php
class SignupForm extends Model
{
public $username;
public $address;
public $password;
public $password_repeat;
public function rules()
{
return [
['username', 'filter', 'filter' => 'trim'],
['username', 'required'],
['address', 'required'],
['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'],
['username', 'string', 'min' => 2, 'max' => 255],
[['file'], 'file', 'extensions'=>'jpg, gif, png'],
['password', 'required'],
['password', 'string', 'min' => 6],
['password_repeat', 'compare', 'compareAttribute' => 'password'],
];
}
public function attributeLabels()
{
return [
'password_repeat' => 'Confirm Password',
'address' => 'Address',
'username' => 'Username',
];
}
public function signup()
{
if ($this->validate()) {
$user = new User();
$model = new SignupForm();
$user->address = $this->address;
$user->username = $this->username;
$user->setPassword($this->password);
$user->generateAuthKey();
if ($user->save()) {
return $user;
}
}
return null;
}
}
因此,我想在Create event
表单的location
字段中显示组织者的地址
希望你现在能理解
谢谢也许你的函数应该是这样的
public function actionCreate()
{
$event= new Event();
$user= $this->findModel2(Yii::$app->user->id);
$event->location = $user->address;
if ($event->load(Yii::$app->request->post()) && $event->save()) {//active can set by default validator
return $this->redirect(['view', 'id' => $event->id]);
}
return $this->render('create', [
'event' => $event
]);
}
在形式上你总是显示位置。然后,您可以在视图中不使用ifs的情况下在更新和创建中使用它。希望这对你有帮助 我没有完全明白。你能显示你的表结构吗?@Inaseskull我已经更新了数据库结构。我所要做的就是将另一个表中的字段上的值显示为默认值。您可以在模型中添加名为
地址
的虚拟属性。检查此项,您可以创建Organizer
表的对象,并通过create传递。例如,$model3=新组织者()代码>和返回$this->render('create',['model'=>$model',model2'=>$model2',model3'=>$model3])代码>@ganeshGhalame我就是这么做的。。我在事件
模型完美解决方案的规则部分添加了一个属性地址
。。。这样我就不必向表单传递多个模型,也不必传递不必要的if条件。。非常感谢你
public function actionCreate()
{
$event= new Event();
$user= $this->findModel2(Yii::$app->user->id);
$event->location = $user->address;
if ($event->load(Yii::$app->request->post()) && $event->save()) {//active can set by default validator
return $this->redirect(['view', 'id' => $event->id]);
}
return $this->render('create', [
'event' => $event
]);
}