5

関連するテーブルからデータのリストをドロップダウン形式で取得するために、以下を使用して Yii にいくつかのフォームがあります。

dropDownList(CHtml::listData(Company::model()->findAll(array('order' => 'company ASC'))));

これは機能しますが、それはすべてのドロップダウンリスト(たくさんあります)にこれを入れていることを意味しarray('order' => 'company ASC'ます。

これが最善の方法ですか?モデルの関係()を使用してこのデータを取得し、関係内で順序を指定する方法はありませんか?

4

2 に答える 2

5

これを行う正しい方法はscopesを使用することだと思います。

結果セットを並べ替えるスコープをいくつでも定義して、次のように使用できます。

Company::model()->scopeName()->findAll();

アプリケーションで会社を常にソート順に取得する必要がある場合は、モデル クラスでデフォルト スコープを定義することもできます。

public function defaultScope() {
    return array('order' => 'company ASC');
}

Company::model()->findAll();これにより、ソートされた結果を返すためのすべての呼び出しが発生します。

于 2011-03-07T18:15:39.490 に答える
1

私は通常opts()、ドロップダウンのソースとして使用できる各モデルにメソッドを追加します。

class Company extends CActiveRecord
{
    // ...

    public static opts()
    {
        $opts = array();
        foreach(self::model()->findAll(array('order'=>'name ASC')) as $model)
            $opts[$model->id] = $model->name;
        return $opts;
    }

こんな風に使われています

echo $form->dropDownList($user, 'company_id', Company::opts());

ページで同じオプションが何度も必要な場合は、結果をプライベートな静的クラス変数に「キャッシュ」するか、DAO を使用してより効率的な方法でリスト データをフェッチすることもできます。

于 2013-03-05T20:04:22.697 に答える