random13
(Randomailer)
August 16, 2011, 8:17pm
1
<?php
class Product extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'products';
}
public function primaryKey()
{
return 'id';
}
public function relations()
{
return array(
'categories'=>array(self::MANY_MANY, 'Category',
'product_categories(prod_id, cat_id)'),
'images'=>array(self::HAS_MANY, 'Image', 'parent_id'),
'sizes'=>array(self::MANY_MANY, 'Size',
'product_sizes(prod_id, size_id)'),
'colors'=>array(self::MANY_MANY, 'Color',
'product_colors(prod_id, color_id)'),
'manufacturer'=>array(self::BELONGS_TO, 'Manufacturer', 'man_id'),
);
}
public function scopes()
{
$a = $this->getTableAlias( false, true );
return array(
'users'=>array(
'condition'=>$a . '.show=1',
),
);
}
}
$products = Product::model()->users()->with('categories', 'images')->findAll('categories.type=:type', array(':type'=>$cat));
когда в запрос добавляю скоп то он не отрабатывает, в чем может быть проблема
andy_s
(Arekandrei)
August 16, 2011, 9:14pm
2
Какие-нибудь подробности о запросе? Ошибка? Сгенерированный код SQL из лога? Так будет намного легче разобраться
random13
(Randomailer)
August 17, 2011, 5:34am
3
ну на самом деле запрос отрабатывается, но не болле того, далее мне нужно считать полученные значения но так как возвращается пустота то ничего не могу сделать, а как получить сгенерированный sql?
andy_s
(Arekandrei)
August 17, 2011, 6:02am
4
В конфиге включить веб лог (раздел components):
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CWebLogRoute',
),
array(
'class'=>'CProfileLogRoute',
),
),
),
И в настрйоки компонента db добавить:
'db'=>array(
'enableProfiling' => true,
'enableParamLogging'=> true,
),
Все запросы отобразятся внизу страницы.
random13
(Randomailer)
August 17, 2011, 6:14am
5
Сделал все как написали, не помогло
вот контроллер
<?php
class IndexAction extends CAction
{
public function run($cat)
{
$products = Product::model()->users()->with('categories', 'images')->findAll('categories.type=:type', array(':type'=>$cat));
$title = $products[0]->categories[0]->title;
$this->getController()->pageTitle = Yii::app()->name . ' - ' . $title;
$this->controller->render('index', array(
'products'=>$products,
'cat'=>$cat,
));
}
}
выдает ошибку
так как нечего извлечь из $products
andy_s
(Arekandrei)
August 17, 2011, 6:20am
6
А как должно помочь отображение запроса? Просто нужно посмотреть на него и определить, так ли он выглядит, как хотелось бы.
random13
(Randomailer)
August 17, 2011, 8:44am
7
А что посмотреть? как посмотреть?
andy_s
(Arekandrei)
August 17, 2011, 9:25am
8
Внизу страницы должно быть что-то вроде такого: 1951
queries.PNG
Нужно найти запрос на выборку продуктов (будет самый большой, наверное) и убедиться, что там что-то не так. Но даже если тут кто-то увидит очевидную ошибку, опыт в использовании лога никогда не помешает