иметь несколько моделей в одной и той же форме. Я не хочу сохранять данные в обеих моделях, но я просто хочу отображать одну переменную в файле просмотра.
У меня есть 2 таблицы Organiser
и Event
Organiser
войдут в систему и Create Event
Теперь есть несколько полей, которые являются общими в обеих таблицах, поэтому, когда пользователь войдет в систему, нажмите кнопку Create Event
, я хочу отобразить address
из таблицы Organiser
в форме
Это то, что я делал до сих пор, что может быть неправильным подходом, поэтому дайте мне знать, можно ли этого добиться другим более простым способом.
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.');
}
}
А вот и мой код _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(); ?>
Теперь проблема заключается в том, что когда дело доходит до сохранения, часть выдает error
, говоря unknown property address
, потому что этого поля не существует в таблице базы данных Event
, я просто хочу, чтобы эти данные отображались в поле местоположения моего create form
так что мне здесь делать
Вот структура таблицы
Organiser Event
organiser_id event_id
username organiser_id
clubname title
image location
email
firstname
lastname
address
Страница ошибки говорит что-то вроде этого
Unknown Property – yii\base\UnknownPropertyException
Getting unknown property: common\models\Event::address
А вот и моя модель Event
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']);
}
}
Вот моя модель User
, представляющая Organiser
таблицу и имя модели в модели внешнего интерфейса 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;
}
}
Итак, я хочу отобразить organiser.address
в форме Create event
в поле location
Надеюсь, теперь вы это понимаете, спасибо.
address
в свою модель, проверьте это yiiframework.com/wiki/167/ - person Ganesh Ghalame   schedule 10.09.2015organiser
и перейти с помощью create. Например$model3 = new Organiser();
иreturn $this->render('create', [ 'model' => $model, 'model2' => $model2, 'model3' => $model3 ]);
- person Insane Skull   schedule 10.09.2015address
в раздел правил моделиevent
- person Mike Ross   schedule 10.09.2015ActionCreate
, который я прикрепил к вопросу. МояOrganiser
модельUser
в проекте - person Mike Ross   schedule 10.09.2015address
. и если его форма обновления, чем имя поля,location
. Итак, если его форма создания и значение равно null, я хочу получить значение из таблицыOrganiser.address
и сохранить его в базе данныхevent.location
- person Mike Ross   schedule 10.09.2015$model->isNewRecord
- person Ganesh Ghalame   schedule 10.09.2015address
из моделиevent
, он там не нужен, и попробуйте. ваш адрес будет исходить от моделиuser
. - person Insane Skull   schedule 10.09.2015Organiser
, или мне нужно выполнить ее вручную для этой формыview
. - person Mike Ross   schedule 10.09.2015organiser.address
и отображать его в формеEvent
, но я передаю всеmodel
со всеми ненужными атрибутами. Дайте мне знать, есть ли другой способ добиться этого. Спасибо - person Mike Ross   schedule 10.09.2015organiser.address
, и отобразить в поле формыevent
созданияevent.location
, чтобы пользователю не приходилось снова заполнять ту же форму. Это главное, что я хочу сделать. Иorganiser
— это имя таблицы, но имя модели в моем проекте дляorganiser
—User
Надеюсь, вы поняли идею. Спасибо - person Mike Ross   schedule 10.09.2015user
. так что вы проходите обе модели. - person Insane Skull   schedule 10.09.2015User
требуется полеaddress
, но когда я импортирую его вEvent
, создаю форму, это поле больше не требуется. Это просто обычное поле ввода. Вот почему я должен проверить переменную[$_POST]
перед сохранением. - person Mike Ross   schedule 10.09.2015$model2
имеет все поляorganiser
и проверку этого. в этом случае покажите также модельUser
. - person Insane Skull   schedule 10.09.2015