我有一个名为Guesses的模型has_many评论。我正在对此进行热切查询,然后将其作为JSON传递给API调用。
关系显然是在两个模型之间设置的,并且它们是正确的(one2many< => belongs2)
我在这个名为'api'的评论中添加了一个范围:
public function scopes()
{
return array(
'api' => array(
'select' => 'id, comment, date',
'limit'=>3,
'order'=>'date DESC',
'together'=>true,
),
);
}
我正在运行以下单行查询:
$data = Guesses::model()->with('comments:api')->findAll();
这里的问题是,当使用with('relation')调用'api'范围时, limit 属性根本不适用。 我在其他类型的范围中添加了'together'=> true,而且我听说它可能有所帮助。它没有什么区别。
我不需要所有猜测的所有评论。我想要前3名(或5名)。我也试图保持单线调用完整和简单,通过范围,关系和参数化函数管理所有内容,以便API调用本身干净简单。
有什么建议吗?
答案 0 :(得分:0)
我知道有几种方法可以达到这个目的。
第一。您可以为关系添加限制,例如
'photos' => array(self::HAS_MANY, 'Photo', 'companyId',
'limit'=>3
)
第二。您可以在呼叫关系时调用限制结果,例如
$model->photos(array('limit' => 4));
也许有其他方法,但我不知道。
答案 1 :(得分:0)
根据documentation,这应该没问题。
我唯一的建议是:
$data = Guesses::model()->with(
array('comments'=>array('scopes'=>array('api')))
)->findAll();
或:
$data = Guesses::model()->findAll(array(
'with'=>array('comments'=>array('scopes'=>array('api')))
));
但这应该是相同的逻辑。我不认为together
会帮助你......默认情况下这是真的。
<强>更新强>
这些示例直接来自relational documentation
$posts=Post::model()->with('comments:recently:approved')->findAll();
或从1.1.7开始:
$posts=Post::model()->with(array(
'comments'=>array(
'scopes'=>array('recently','approved')
),
))->findAll();
或自1.1.7起
$posts=Post::model()->findAll(array(
'with'=>array(
'comments'=>array(
'scopes'=>array('recently','approved')
),
),
));
和延迟加载:
$approvedComments = $post->comments('comments:approved');
这表明您的代码应该有效..您的跟踪中正在运行什么查询? 您是否有任何默认范围尚未发布?他们的关系中是否定义了任何额外的选项?我遇到了这两个干扰命名范围的问题。