与YII合作更有效的方式?查询数据库


more efficient way of working with YII? Querying the database

这是一个

很难问的问题,因为我拥有的代码工作正常。我只是在学习 YII 平台,我的问题不是我无法获得我想要的工作,而是如果有更好的方法来利用 YII 平台及其类

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

在产品详细信息部分,我希望拉出其相关产品。值得庆幸的是,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时,我得到了包含查询命令的数组。

如果您需要更多关于我正在寻找什么的澄清,请告诉我。

你说得对,你没有利用 Yii。 Yii(和其他 MVC 框架(将数据库层抽象为模型。

上面显示的getSliderCriteria()是构建条件以优化与模型的交互的示例。

您应该尝试弄清楚的是哪个模型表示您在 Lightspeed 中寻找的数据,然后构建并应用标准。

在大多数现代框架中,你不应该写太多(如果有的话(原始 SQL。