私は最近 Yii フレームワークを導入され、現在、会社の Web アプリケーション システムを開発しています。ただし、それぞれのテーブルに接続するためにモデルを作成するときに、一度に 1 つのリレーションしか選択できないことに気付きました。ただし、同じデータベースの 2 つの別個のテーブルを 1 つのフォームで接続する必要があります。
これをどのように達成できるかについてのアイデアはありますか?
私は最近 Yii フレームワークを導入され、現在、会社の Web アプリケーション システムを開発しています。ただし、それぞれのテーブルに接続するためにモデルを作成するときに、一度に 1 つのリレーションしか選択できないことに気付きました。ただし、同じデータベースの 2 つの別個のテーブルを 1 つのフォームで接続する必要があります。
これをどのように達成できるかについてのアイデアはありますか?
モデル内には、以下の関数が表示されます。
/**
* @return array relational rules.
*/
public function relations()
{
return array(
);
}
これで関係を追加できます。お気に入り
'user' => array(self::BELONGS_TO, 'User', 'user_id'),
'comments' => array(self::HAS_MANY, 'Comments', 'blog_post_id'),
等。、
データベース エンジンが Innodb にあり、テーブルに外部キー リレーションがある場合、モデルの作成中にリレーションが自動的に生成されます。
詳細については、これを読んでください
リレーションはいくつでも使用できます。
=============================================
そして、2 度目の読書の後、2 つのモデルのオブジェクトを 1 つの形式にすることについて質問されたと思いますか? そのため、コントローラーで各モデルのオブジェクトを生成し、それらのオブジェクトをビューrender
またはrenderPartial
関数を介して渡すことができます
例えば、
$this->render('admin',array(
'model'=>$model,
'model2'=>$model2,
));
ビュー内では、それぞれのフィールドにモデルとモデル2を使用します
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'sample-form',
'enableAjaxValidation'=>false,
)); ?>
.....
<?php echo $form->labelEx($model,'column'); ?>
<?php echo $form->textField($model,'column'); ?>
<?php echo $form->error($model,'column'); ?>
<?php echo $form->labelEx($model2,'column'); ?>
<?php echo $form->textField($model2,'column'); ?>
<?php echo $form->error($model2,'column'); ?>
....
コントローラー関数内では、以下のようなものを使用します(データの保存など)
$model->attributes=$_POST['ModelOnesName'];
$valid = $model->validate();
$model2->attributes = $_POST['ModelTwosName'];
$valid = $model2->validate() && $valid; //if need validation checks
if($valid)
{
$model->save();
$model2->save();
}