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

时间:2013-10-02 16:04:27

标签: php yii

这是一个很难问的问题,因为我的代码工作正常。我只是学习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时我得到包含查询命令的数组。

如果您需要进一步澄清我正在寻找的内容,请告诉我。

1 个答案:

答案 0 :(得分:0)

你是对的,你没有利用Yii。 Yii(以及其他MVC框架)将数据库层抽象为model

您在上面显示的getSliderCriteria()building criteria的示例,用于优化与模型的互动。

您应该尝试和弄清楚什么模型代表您在Lightspeed中寻找的数据,然后构建并应用标准。

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