我有一个与表日期有1:N关系的文章。我需要显示每个日期的文章列表。我使用带有Inner连接的findBySql。
'SELECT *
FROM articles_art as art
INNER JOIN dates_dat as dat
ON art.id_art = dat.idart_dat
WHERE art.validated_art = 1
AND dat.date_dat <= "' . $todayDate .
'" ORDER BY dat.date_dat, art.rank_art');
我不明白为什么当我尝试访问文章[$ key] - &gt; dat 时, dat 是一个日期数组而不是对象日期? 感谢
答案 0 :(得分:2)
Yii有一种透明的方式(没有编写sql)来做到这一点。您可以在模型上使用范围和关系方法来获取数据。
这种方式的优点是,与findBySql不同,您需要在每次要查找内容时定义sql,您可以使用多次范围和关系。
因此假设您有一个名为Article的模型而另一个名为Date的模型,您的模型将显示如下:
class Articles extends CActiveRecord {
…
public function relations() {
return array('date' => array(self::BELONGS_TO, 'Date', 'date_id'));
}
public function scopes() {
return array('validated' => array('condition' => 'validated_art=1'));
}
…
}
class Date extends CActiveRecord {
…
public function relations() {
return array('articles' => array(self::HAS_MANY, 'Article', 'date_id'));
}
public function scopes() {
return array('byDate' => array('order' => 'date_dat'),
'validated' => array('condition' => 'date_dat < 2011-xx-xx'));
}
…
}
你的发现会显示喜欢:
$model = Date::model()->validated()->byDate()->findAll();
foreach($model->articles as $k => $article) {
echo $article->title;
}
上面的代码只是一个例子来说明在Yii上执行它的正确方法,我希望能帮到你。