这是一个很难问的问题,因为我的代码工作正常。我只是学习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 :(得分:0)
你是对的,你没有利用Yii。 Yii(以及其他MVC框架)将数据库层抽象为model。
您在上面显示的getSliderCriteria()
是building criteria的示例,用于优化与模型的互动。
您应该尝试和弄清楚什么模型代表您在Lightspeed中寻找的数据,然后构建并应用标准。
在大多数现代框架中,您不应该编写太多(如果有的话)原始SQL。 。 。