1

テーブルの 1 つのデータを取得するときに問題が発生します。

Doctrine 1 + Codeigniter を使用していますが、問題は、データが最後の 1 つのレジストリしか取得しないことです。

このテーブル (OpModelos と AnSimNavTrans) の間の関係を定義していません。これがシーナリーです。

コントローラ:

class Modelos extends CI_Controller {

    public function view($idModelo) {
        $aData['site_description'] = 'AutoDato';
        $aData['site_keywords'] = 'keywords';
        $aData['site_robots'] = 'robots';
        $aData['site_author'] = 'author';

        $modelo = Doctrine::getTable('OpModelo')->find($idModelo);
        $modelo_caract = Doctrine::getTable('anCaractUserMo')->getByModeloId($idModelo);
        $modelos_similares_nav = Doctrine::getTable('OpModelo')->getModeloSimNav($idModelo);

        $aData['modelo'] = $modelo;
        $aData['modelo_caract'] = $modelo_caract;
        $aData['modelos_similares_nav'] = $modelos_similares_nav;

        $aData['view'] = 'modelo/view';

        $this->load->view('template', $aData);
    }
}

データ テーブル AnSimNavTrans

op_modelo_id  cod_mod med_sim
    1           10      0.9
    1           2       0.8
    1           11      0.7
    1           4       0.5
    1           6       0.1

モデル

class OpModeloTable extends Doctrine_Table {

    public function getModeloSimNav($idModelo) {
        $query = Doctrine_Query::create();
        $query->from('AnSimNavTrans');
        $query->where('op_modelo_id = ?', $idModelo);
        $query->orderBy('med_sim DESC');
        $query->limit('3');

        $result = $query->execute();

        return $result->toArray();
    }
}

意見:

print_r($modelos_similares_nav);

Array ( [0] => Array ( [op_modelo_id] => 1 [cod_mod] => 11 [med_sim] => 0.7 ) )

ビューでわかるように、クエリの配列を取得すると、最後のレコードのみが表示されます。

これの何が問題なのですか?

4

1 に答える 1

1

初め:

OpModeloTable->getModeloSimNavにクエリを行うのは私には奇妙に感じますAnSimNavTrans。なぜそれをするために使用AnSimNavTransTableしないのですか?

2番:

配列が必要な場合は、使用する代わりに配列で水和しますtoArray:

$result = $query->execute(array(), Doctrine_Core::HYDRATE_ARRAY);.

この最後のものでテストします。あなたのソリューションが機能しないのに、なぜこの方法が機能するのかわかりません。コードを見ると、toArray コメントの関数は次のように述べています。

$query->execute(array(), Doctrine_Core::HYDRATE_ARRAY); の結果を模倣します。

なので、この機能を真似するのではなく、実際に使ってみたほうがいいのではないでしょうか..

ちなみに、先ほど言ったように水分補給を使うよりもtoArray、配列でハイドレーションを使用する背後にある考え方は、doctrine はオブジェクト (およびすべての依存関係) をハイドレートしないということです。これにより、ページが読み込まれる時間を大幅に節約できます。

を使用するtoArray場合は、オブジェクトをハイドレートしてから配列に変換します。あなたは多くの時間を無駄にします。

これは、パフォーマンスの問題を修正するための最初のステップです。

于 2013-02-17T09:01:52.753 に答える