我正在从数据库中获取大量订单记录,我想向获取的记录添加另一个字段,即相关表(客户)中的列。
但此字段不会直接获取,因为它不是订单模型的一部分。
所以我向模型添加了一个属性来保存这个额外的属性,并像这样做了我的选择:
$criteria = new CDbCriteria();
$criteria->join = 'INNER JOIN customers c ON t.idCustomer = c.idCustomer';
$criteria->select = 't.* , c.CustomerName AS CustomerName'; // CustomerName is the added attribute
$data = Orders::model()->findAll($criteria);
var_dump($data); // in here CustomerName is fetched,
$data = CJSON::encode($data); // but not here, its not even part of encoded string!
我需要立即对其进行编码,并且我不想将afterFind()放入我的模型中(尽管我认为它不会被编码),
有什么部分我不明白吗? 我怎样才能实现这一点?
如果不修改CActiveRecord类,就无法做到这一点。在 Yii 中,默认情况下你不能使用魔术二传手和获取者。创建模型实例时,属性列表中仅添加数据库列。
您可以通过覆盖模型文件中的 getMetaData() 来添加其他属性:
public function getMetaData(){
$data = parent::getMetaData();
$data->columns['CustomerName'] = array('name' => '...');
return $data;
}
尝试使用 yii: http://www.yiiframework.com/doc/guide/1.1/en/database.arr 的这个特性。你可以这样做:在类中 顺序:
public function relations() { return array( 'customer' => array( self::HAS_ONE, 'Customer', array('idCustomer' => 'idCustomer' ) );
}
其中客户是表客户的记录。然后,要从表中获取其他字段,客户显示下一个代码:
$order = Orders::model()->find(100500); $customeName = $order->customer->CustomerName;
更新
或者您可以使用查询生成器,结果将在数组中:功能更少,但性能更高,内存消耗更少