0

这是一个很难问的问题,因为我的代码运行良好。我只是在学习 YII 平台,我的问题不是我无法得到我想要的工作,而是如果有更好的方法来利用 YII 平台及其类。

基本上我有一个使用 YII 平台的名为 Lightspeed 的平台的网上商店。

在产品详细信息部分,我希望提取其相关产品。值得庆幸的是,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 回答