2013-10-03 2 views
1

Я ищу для правильной передачи данных для родственных продуктов с помощью рамки YII, так как Im только изучает эту структуру. Мне интересно, знаете ли вы, как я должен это делать.yii с правильной/правильной моделью

Ive взял на себя проект, который использует 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_id и related_id, где related_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; 

} 

Однако я не уверен, что делать с этим конечный бит кода и как связать его с модель, которую я показал выше.

+0

Возможно, вы захотите добавить дополнительную информацию о модели ProductRelated, чтобы мы могли вам помочь. Поля/причина, по которой вы хотите связать свой запрос с этой моделью. –

+0

Спасибо, я отредактировал сообщение и добавил дополнительную информацию до модели ProductRelated. – Adrian

+0

Было бы полезно увидеть базовую модель ('BaseProductRelated'). , , – ernie

ответ

0

В вашем коде есть много ошибок. Я не думаю, что ваш предшественник знал yii очень хорошо. Включены функциональные возможности для получения отношений.

чтения о Yii реляционных активных записей:

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

С наилучшими пожеланиями

+0

Возможно, я должен уточнить, я написал также первый запрос. Но спасибо, я посмотрю – Adrian

0

Yii модель использует ActiveRecord узор. Вы обнаружите, что метод relations() вашей модели позволяет вам определять реляционные данные.

Если ваш метод Product.relations() правильно установлен, соответствующие продукты должны быть «волшебными».

NB: Я полагаю, что связанная таблица продуктов представляет собой таблицу ассоциаций для отношения n-n между Продуктом и ... Продукт, поэтому вы будете использовать MANY_MANY. Взгляните на образец кода в конце документации метода relations().

Смежные вопросы