yii cdbcriteria->子视图中没有显示子表记录

时间:2013-12-24 08:03:40

标签: php yii

在基于yii的应用程序中我正在处理搜索查询。查询在两个表customerscustomerContacts上执行。客户可以在不同的国家/地区拥有一对多的联系人

我使用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; ?>

我陷入了困境。请帮我哪里做错了?

2 个答案:

答案 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;
        }
        ?>