这是一个
很难问的问题,因为我拥有的代码工作正常。我只是在学习 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。