私は現在、雑誌サイトで作業していますが、Yii が CActiveDataProvider を使用してすべてのデータを返すようにするのに問題があります。SQL クエリは、SQL を介して実行すると正常に実行され、Yii で実行してもエラーは発生しません。ログを確認すると、Yii を介したときに SQL ステートメント全体が実行されています。
public function actionIndex()
{
$this->layout = '//layouts/column1';
if(isset($_GET['cat']))
{
$cat = $_GET['cat'];
$catname = Yii::app()->db->createCommand();
$catname->select='category_name';
$catname->from='category';
$catname->where('id=:cid', array(':cid'=>$cat));
$categoryname = $catname->queryScalar();
$criteria = new CDbCriteria();
$criteria->alias = 'article';
$criteria->select ='article.id, article.title, article.content, article.date_published, image.file_name, image.alt_text, author.first_name, author.last_name';
$criteria->join='INNER JOIN category_article ON article.id = category_article.article_id ';
$criteria->join.='INNER JOIN image ON image.article_id = article.id ';
$criteria->join.='INNER JOIN author ON author.id = article.author_id';
$criteria->condition='category_article.category_id=:cid AND article.completed = 3 AND article.live = 1 AND article.review = 1';
$criteria->params=array(':cid'=>$cat);
$dataProvider=new CActiveDataProvider('Article', array('criteria'=>$criteria));
$this->render('index',array(
'dataProvider'=>$dataProvider,
'cat'=>$cat,
'categoryname'=>$categoryname,
));
Yii::app()->end();
}
$dataProvider=new CActiveDataProvider('Category');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
必要に応じて、記事モデルの関係を次に示します。
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'author' => array(self::BELONGS_TO, 'Author', 'author_id'),
'articleCounts' => array(self::HAS_MANY, 'ArticleCount', 'article_id'),
'articleNote' => array(self::HAS_ONE, 'ArticleNote', 'article_id'),
'categories' => array(self::MANY_MANY, 'Category', 'category_article(article_id, category_id)'),
'comments' => array(self::HAS_MANY, 'Comment', 'article_id'),
'featureds' => array(self::HAS_MANY, 'Featured', 'article_id'),
'image' => array(self::HAS_ONE, 'Image', 'article_id'),
'nonmembercomments' => array(self::HAS_MANY, 'Nonmembercomment', 'article_id'),
'tags' => array(self::MANY_MANY, 'Tag', 'postid_tagid(article_id, tag_id)'),
'videos' => array(self::HAS_ONE, 'Video', 'article_id'),
);
}
ここにprint_rの出力があります:
Article Object
(
[_new:CActiveRecord:private] =>
[_attributes:CActiveRecord:private] => Array
(
[id] => 56
[title] => Hello My Lovely
[content] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi a arcu dictum, tincidunt libero vel, imperdiet ante. Proin consectetur risus vel purus vestibulum, nec scelerisque felis posuere. Maecenas ut erat lobortis, rhoncus tellus at, ultricies turpis. Donec pretium aliquet mi. Integer luctus interdum magna, quis dictum ligula bibendum sed. Curabitur nibh felis, sollicitudin hendrerit nunc eget, interdum fringilla leo. Cras consectetur elit metus, at tempus erat vehicula quis.
[date_published] => 2014-07-15 23:16:07
)
[_related:CActiveRecord:private] => Array
(
[image] => Image Object
(
[_new:CActiveRecord:private] =>
[_attributes:CActiveRecord:private] => Array
(
[id] => 36
[article_id] => 56
[file_name] => hello-you20140624190852.jpg
[image_name] => Hello You
[alt_text] => My Hottie!
)
[_related:CActiveRecord:private] => Array
(
)
[_c:CActiveRecord:private] =>
[_pk:CActiveRecord:private] => 36
[_alias:CActiveRecord:private] => t
[_errors:CModel:private] => Array
(
)
[_validators:CModel:private] =>
[_scenario:CModel:private] => update
[_e:CComponent:private] =>
[_m:CComponent:private] =>
)
[author] =>
)
[_c:CActiveRecord:private] =>
[_pk:CActiveRecord:private] => 56
[_alias:CActiveRecord:private] => t
[_errors:CModel:private] => Array
(
)
[_validators:CModel:private] =>
[_scenario:CModel:private] => update
[_e:CComponent:private] =>
[_m:CComponent:private] =>
)
ご覧のとおり、クエリのすべてが返されますが、作成者は空白のままで、その理由がわかりません。記事モデルのリレーションを HAS_ONE に変更するまでは、画像オブジェクトが同じことをしていることに気付きました。各記事には関連付けられた画像が 1 つしかないため、これは問題ありません。その問題の原因となるような、書かれている方法に何か問題があると思う人はいますか? 事前にすべての回答に感謝します。