0

私が持っているコードはうまく機能しているので、これは難しい質問です。私は YII プラットフォームを学んでいますが、私の問題は、私が望むものを手に入れることができないということではありませんが、YII プラットフォームとそのクラスを利用してこれを行うためのより良い方法があればなおさらです。

基本的に、私は YII プラットフォームを使用する Lightspeed というプラットフォームを使用する Web ストアを持っています。

製品詳細セクションでは、関連製品を探しています。ありがたいことに、Lightspeed にはすでにこのテーブルが用意されています (これは、私がこれを間違っていると考えるより多くの理由を与えてくれます)。

現在、私がしていることは少しハードコードされているようです。

私の見解では、製品を入手するためにこれを持っています...

$related_products = Product::GetRelatedProducts();

コントローラーには何もありませんが、モデルにはこれがあります..

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

    return $rawData;
}   

私が言ったように、このコードには何も問題はありませんが、モデル内の他のすべてのクエリに非常に多くの機能が配置されているため、これが間違っていると思います。

例としては..

    protected function getSliderCriteria($autoadd=0)
{
    $criteria = new CDbCriteria();
    $criteria->distinct = true;
    $criteria->alias = 'Product';
    $criteria->join='LEFT JOIN '.ProductRelated::model()->tableName().' as ProductRelated ON ProductRelated.related_id=Product.id';
    if (_xls_get_conf('INVENTORY_OUT_ALLOW_ADD',0)==Product::InventoryMakeDisappear)
        $criteria->condition = 'ProductRelated.product_id=:id AND inventory_avail>0 AND web=1 AND autoadd='.$autoadd.' AND parent IS NULL';
    else
        $criteria->condition = 'ProductRelated.product_id=:id AND web=1 AND autoadd='.$autoadd.' AND parent IS NULL';
    $criteria->params = array(':id'=>$this->id);
    $criteria->limit = _xls_get_conf('MAX_PRODUCTS_IN_SLIDER',64);
    $criteria->order = 'Product.id DESC';

    return $criteria;

}

これは、このデータを使用しているように見えるウィジェットの単なる例です (ただし、印刷する$criteriaとクエリ コマンドを含む配列が得られるため、そのデータがどのように配列に変換されるかはわかりません。

私が探しているものについてさらに明確にする必要がある場合はお知らせください。

4

1 に答える 1

0

あなたが Yii を活用していないのは正しいです。Yii (およびその他の MVC フレームワーク) は、データベース層をモデルに抽象化します。

上に示したのは、モデルとの相互作用を改善するための基準を構築getSliderCriteria()する例です。

Lightspeed で探しているデータをどのモデルが表しているかを調べてから、基準を構築して適用する必要があります。

ほとんどの最新のフレームワークでは、生の SQL を (あるとしても) 多く書くべきではありません。. .

于 2013-10-02T21:57:47.640 に答える