yii正确使用/理解模型

时间:2013-10-03 09:00:25

标签: php yii

我希望能够使用YII框架正确地提取相关产品的数据,因为我只是学习这个框架我想知道你应该如何解决这个问题。

我接管了一个使用YII的项目,它似乎已经有了一些功能,但我不知道如何利用它。

这是我目前的代码......

在我的产品模型中,我自己写了这个..

public function getRelatedProducts($id)
{
    $rawData=Yii::app()->db->createCommand('SELECT * FROM '.Product::model()->tableName().' as Product LEFT JOIN '.ProductRelated::model()->tableName().' as ProductRelated  ON ProductRelated.related_id=Product.id LEFT JOIN '.Images::model()->tableName().' as image ON Product.image_id=image.id  WHERE ProductRelated.product_id='.$id.' ')->queryAll();

    return $rawData;
}

我使用...

获取此数据
$related_products = Product::GetRelatedProducts($model->id);

这有效,但没有使用YII框架。

我注意到有一个名为ProductRelated的模型(其中没有多少)。但我不知道如何使用它。

这显然是指我在数据库中名为product_related的表,它有2个字段product_idrelated_id,其中related_id表示产品的ID它被分配(与之相关)。

我想使用这个类,因为它显然是用这个写的。现在我只是跳过它。

class ProductRelated extends BaseProductRelated     {

public static function model($className=__CLASS__)
{
    return parent::model($className);
}


public static function LoadByProductIdRelatedId($intProductId , $intRelatedId)
{

    return ProductRelated::model()->findByAttributes(array('product_id'=>$intProductId,'related_id'=>$intRelatedId));


    }



 }

阅读了更多关于YII的内容后,我重建了我的查询......

    public function getRelatedProducts($id)
{
    $criteria = new CDbCriteria();
    $criteria->alias = 'Product';
    $criteria->join ='LEFT JOIN  '.ProductRelated::model()->tableName().' as ProductRelated ON ProductRelated.related_id=Product.id';
    $criteria->join .=' LEFT JOIN  '.Images::model()->tableName().' as image ON Product.image_id=image.id';     
    $criteria->condition = 'ProductRelated.product_id='.$id.'';
    $criteria->order = 'Product.id DESC';

    return $criteria;

}   

但是我不知道如何处理最后一段代码以及如何将其与我上面显示的模型相关联。

2 个答案:

答案 0 :(得分:0)

您的代码中存在许多错误。我不认为你的前任也非常了解yii。 包含了获得关系的功能。

阅读yii关系活动记录:

http://www.yiiframework.com/doc/guide/1.1/en/database.arr

祝你好运

答案 1 :(得分:0)

Yii模型使用 ActiveRecord 模式。您会发现模型的relations()方法允许您定义关系数据。

如果正确设置了Product.relations()方法,则相关产品应“神奇地”可用。

注意:我想relatedProduct表是Product和... Product之间的n-n关系的关联表,因此您将使用MANY_MANY。看一下relations()方法文档末尾的示例代码。