1

yii-framework を使用して CRUD 画面を作成する必要があります。1 つのテーブルを使用した単純な CRUD 画面は問題なく動作しています。ドロップダウン (リンク テーブル) の使用中に問題に直面しています。

FK が指定されている場合にドロップダウンで CRUD を作成すると思われる giix 拡張機能をインストールしましたが、ホスティング プロバイダーに MySql Engine InnoDB がないため、その拡張機能を使用できません。手動で行う必要があります。

私は2つのテーブルを持っています

main:- id store_id プレフィックス

store:- ID名

現在、メインの store_id は store テーブルの id への FK です。そして、メインテーブルの CRUD を作成したいです。

追加画面が表示されるように:-

ストア名:- ドロップダウン プレフィックス:- テキストボックス

ビュー画面では、store_id を表示する代わりに、store テーブルの name 列を使用する必要があります

ありがとうございます。

4

2 に答える 2

2

Gii を使用して CRUD を生成し、私のブログを読んでください。http://jmmurphy.blogspot.com/2013/05/using-yii-model-relations.html

基本的に、Gii 生成後の store_id フィールドには次のようなものがあります。

<?php echo $form->labelEx($model,'store_id'); ?>
<?php echo $form->textField($model, 'store_id', array('size'=>60,'maxlength'=>255));?>
<?php echo $form->error($model,'store_id'); ?>

textField 行は次のように置き換えられます。

<?php $list = CHtml::listData(Store::model()->findAll(), 'id', 'name'); ?>
<?php echo $form->dropDownList($model, 'store_id', $list, array('empty'=>'(Select a Store)')); ?>

次のように、(データベースが外部キーをサポートしていない場合でも) 関連するテーブルにアクセスできるように、メイン モデルでリレーションを定義する必要もあります。

public function relations()
{
    return array(
        'store'=>array(self::BELONGS_TO, 'Store', 'store_id'),
    );
}

このリレーションを完成させるには、Store モデルに次のリレーションも追加する必要があります。

public function relations()
{
    return array(
        'main'=>array(self::HAS_MANY, 'Main', 'store_id'),
    );
}

これらの関係は、Store と Main の間の 1 対多の関係を定義します。ここで、store は親であり、Main は子です。1 対 1 の関係にするには、HAS_MANY を HAS_ONE に変更します。HAS_* は親モデルに入り、子テーブルの外部キー属性を指します。BELONGS_TO は子に入り、親の主キーを指す子テーブルの属性を伝えます。

view アクションでストア名を表示するには、view.php の「store_id」を次のような配列に変更する必要があります。

array(
   'name' => 'store_id',
   'value' => $model->store->name,
)

管理画面は若干異なります。正確な理由はわかりませんが、管理ビューで ID の代わりにストア名を表示するには、次のような配列を使用する必要があります。

array(
   'name' => 'store_id',
   'value' => '$data->store->name',
)

$model の代わりに $data がモデルになるように Gii がこれを生成することに注意してください。また、変数宣言を単一引用符で囲む必要があるように、ファンキーな二重間接処理を行うことに注意してください。

于 2013-06-24T00:24:54.500 に答える
0

jmarkmurphy さん、ご協力ありがとうございます。あなたは私を大いに助けてくれました。あなたが私にガイダンスを与えてくれたので、私はあなたの答えを正しいものとしてマークしました. 正確なコードを詳細に投稿するだけです。

以下のコードでview.phpを変更しました:-

<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
    'id',
    'store.name',
    'prefix',
),

));

また、以下のコードで admin.php を変更しました:-

<?php echo CHtml::encode($data->store->name); ?>

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'main-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
    'id',
    'store.name',
    'prefix',
    array(
        'class'=>'CButtonColumn',
    ),
),

)); ?>

jmarkmurphy さん、ありがとうございました。どうもありがとう 。私のアプリケーションは現在機能しており、まさに私が望んでいた方法です。

于 2013-06-27T18:05:22.090 に答える