在基于yii的应用程序中我正在处理搜索查询。查询在两个表customers
和customerContacts
上执行。客户可以在不同的国家/地区拥有一对多的联系人
我使用cdbcriteria作为:
$criteria = new CDbCriteria;
$criteria->alias = 't' ;
$criteria->with= array("customerContacts"=> array("select"=>"customerContacts.fullname"));
$criteria->condition = " customerContacts.country_id = 1";
$customers = Customer::model()->findAll($criteria);
关系是
在Costumer模型中:
'customerContacts' => array(self::HAS_MANY, 'customerContacts', 'customer_id'),
在customerContact模型中:
'customer' => array(self::BELONGS_TO, 'Customer', 'customer_id'),
问题是customerContact表中有一个fullname列。这个cdbCriteria正在选择该全名,但它在视图页面中没有显示,尽管表中存在数据。
查看代码
<?php foreach($customers as $customer):
echo $customer->customerContacts->fullname;
endforeach; ?>
我陷入了困境。请帮我哪里做错了?
答案 0 :(得分:1)
首先在你的情况下,没有必要在条件中使用with
,因为你指定了关系,并且使用延迟加载可以使用customerContacts,并且因为你不需要在这里加载案例,我们可以简单地使用
Customer::model()->findAll()
其次;您将customerContacts关系指定为HAS_MANY关系。结果是$customer->customerContacts
将是一个对象数组。
因此,在您看来,您将不得不使用
<?php foreach($customers as $customer):
foreach($customer->customerContact as $customerContact){
echo $customerContacts->fullname;
}
endforeach; ?>
但这只适用于客户可能拥有多个customerContact记录的情况。 如果可能,您将不得不为您的关系添加条件,否则将显示所有customerRelation记录。 如果那不可能,则必须将关系更改为HAS_ONE关系,并指定它的相关列。
答案 1 :(得分:0)
试试这个
<?php
$customers = Customer::model()->with('customerContacts')->findByPk(1);
echo $customers->name;
foreach($customers->customerContacts as $contact)
{
echo $contact->fullname;
}
?>