私はこのフレームワークを学んでいるだけなので、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_id
とrelated_id
がrelated_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;
}
しかし、コードの最後のビットをどうするか、また、上に示したモデルとどのようにリンクするかはわかりません。