【发布时间】:2011-09-24 03:31:39
【问题描述】:
你好,只是个问题
我正在为一个在前端使用 sproutcore 的项目开发一个安静的应用程序。
我的问题是,当需要返回 json 时,从具有其他相关模型的模型中获取数据的最有效方法是什么。我昨天读到它建议在处理数组时使用 DAO 层,所以对于我的示例来说,这就是我目前所拥有的。
我有一个客户列表,每个客户都有 HAS_MANY 品牌和每个品牌都有 HAS_MANY 项目。不是 用他们的品牌得到一个很好的客户群,这就是我所拥有的
$clients = Yii::app()->db->createCommand('select client.* from client where client.status = 1')->queryAll();
foreach($clients as $ckey => $client)
{
$clients[$ckey] = $client;
$brand_ids = Yii::app()->db->createCommand('select brand.id as brand_id, brand.client_id as b_client_id from brand where brand.client_id ='.$client['id'])->queryAll();
foreach($brand_ids as $bkey => $brand_id)
{
$clients[$ckey]['brands'][] = $brand_id['brand_id'];
}
}
到目前为止,这是返回我想要的东西,但它是实现我所追求的最有效的方法吗?
【问题讨论】:
-
如果您的表
client没有CActiveRecord 对象,请先执行此操作(请参阅:yiiframework.com/doc/guide/1.1/en/database.ar)。之后,您将能够获得简单的数据:$clients = Client::model()->with('brand')->findByAttributes(array('status'=>1)); -
由于我将返回 json,使用 DAO 层不是更好,因为使用 ar 执行查询返回的信息比我需要的多得多。所以当我对数组进行编码时,我最终得到的对象比我需要返回的要多??
-
如果我理解正确的话:1)你可以写出你想选择的列(抛出模型类
Client并与Brand建立关系)2)接下来,在foreach之后声明选择这些 2.1) 并像您在问题示例中所做的那样转换为 json / 我仍然建议首先为表创建模型。我先做,如果我对表进行了一些全局更改,我只更改我的模型类。 -
@briiC.lv 您能否以代码的形式提供一个示例作为答案,以便我可以为您排名