2013-10-02 24 views
0

这是一个难以解答的问题,因为我的代码工作正常。我只是在学习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我得到一个包含查询阵列小部件的例子命令。

让我知道如果你需要什么进出口寻找更多的澄清。

回答

0

你说的没错,你没有充分利用的Yii。Yii的(和其他MVC框架),抽象的数据库层伸到一个model

上面显示的getSliderCriteria()building criteria的一个示例,用于优化与模型的交互。

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

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