1

私はこのフレームワークを学んでいるだけなので、YII フレームワークを使用して関連製品のデータを正しく取得したいと考えています。

私は YII を使用するプロジェクトを引き継ぎました。すでにいくつかの機能が整っているようですが、それを利用する方法がわかりません。

これが私の現在のコードです...

私の製品モデルでは、これを自分で書きました..

public function getRelatedProducts($id)
{
    $rawData=Yii::app()->db->createCommand('SELECT * FROM '.Product::model()->tableName().' as Product LEFT JOIN '.ProductRelated::model()->tableName().' as ProductRelated  ON ProductRelated.related_id=Product.id LEFT JOIN '.Images::model()->tableName().' as image ON Product.image_id=image.id  WHERE ProductRelated.product_id='.$id.' ')->queryAll();

    return $rawData;
}

そして、私はこのデータを使用して取得します...

$related_products = Product::GetRelatedProducts($model->id);

これは機能しますが、YII フレームワークを使用していません。

ProductRelated というモデルがあることに気付きました (あまり含まれていません)。しかし、その使用方法がわかりません。

これは明らかに、データベースにある と呼ばれるテーブルを指しますproduct_related。これにはproduct_idrelated_idrelated_id割り当てられた (関連する) 製品の ID を表します。

明らかにこれを念頭に置いて書かれたので、このクラスを使用したいと思います。今のところ、私はそれをスキップしています。

class ProductRelated extends BaseProductRelated     {

public static function model($className=__CLASS__)
{
    return parent::model($className);
}


public static function LoadByProductIdRelatedId($intProductId , $intRelatedId)
{

    return ProductRelated::model()->findByAttributes(array('product_id'=>$intProductId,'related_id'=>$intRelatedId));


    }



 }

YII についてさらに読んだ後、クエリを再構築しました...

    public function getRelatedProducts($id)
{
    $criteria = new CDbCriteria();
    $criteria->alias = 'Product';
    $criteria->join ='LEFT JOIN  '.ProductRelated::model()->tableName().' as ProductRelated ON ProductRelated.related_id=Product.id';
    $criteria->join .=' LEFT JOIN  '.Images::model()->tableName().' as image ON Product.image_id=image.id';     
    $criteria->condition = 'ProductRelated.product_id='.$id.'';
    $criteria->order = 'Product.id DESC';

    return $criteria;

}   

しかし、コードの最後のビットをどうするか、また、上に示したモデルとどのようにリンクするかはわかりません。

4

2 に答える 2

0

Yii モデルはActiveRecordパターンを使用します。モデルの Relations ()メソッドを使用すると、リレーショナル データを定義できることがわかります。

Product.relations() メソッドが適切に設定されている場合、関連する製品は「魔法のように」利用可能になります。

NB : relatedProduct テーブルは、Product と ... Product の間の nn リレーションシップの関連付けテーブルだと思うので、MANY_MANY を使用します。Relations() メソッドのドキュメントの最後にあるサンプル コードを見てください。

于 2013-10-03T09:38:22.223 に答える
0

あなたのコードには多くの間違いがあります。あなたの前任者も yii をよく知らなかったと思います。リレーションを取得するための機能が含まれています。

yii リレーショナル アクティブ レコードについて読んでください。

http://www.yiiframework.com/doc/guide/1.1/en/database.arr

よろしくお願いします

于 2013-10-03T09:14:16.540 に答える