1

我目前是 Yii 的新手,在我的应用程序中遇到了一些问题。

我有 2 个 AR(员工和孩子),关系是员工 has_many Children。现在,当我们进入 Employee 的视图时(在 view&id=blablabla 不在索引中),我想列出 Employee 拥有的所有孩子。

我在 EmployeeController 类中创建了一个函数来从我的数据库中检索孩子

$anak = Anak::Model()->findAll(array(
                            'condition'=>'id_karyawan=:id_karyawan',
                            'params'=>array(':id_karyawan'=>$id_karyawan)));
    //return $anak;
    foreach ($anak as $data){
        return $data->namaanak;
    }

问题是,它只显示孩子的 1 个数据(确切地说是第一个数据),即使在我的数据库中,员工有 3 个孩子。当我尝试计算查询结果时,它显示为 3。

我的员工/观点是这样的

$this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
    'id_karyawan',
    'nama',
    array(
        'name'=>'idjabatan',
        'value'=>$model->findByPk($model->id_karyawan)->jabatan->namajabatan,
    ),
    array(
        'name'=>'gaji',
        'value'=>Yii::app()->numberFormatter->formatCurrency($model->findByPk($model->id_karyawan)->jabatan->gaji, 'Rp'),
    ),
    'alamat',
    array(
        'name'=>'ttl',
        'value'=>$model->tempatlahir.', '.Yii::app()->dateFormatter->format("dd MMMM yyyy", $model->tgllahir),
    ),
    array(
        'name'=>'Istri',
        'value'=>Istri::model()->getNama($model->id_karyawan),
        'type'=>'raw'
        ),
    array(
        'name'=>'Anak',
        'value'=>$this->getAnak($model->id_karyawan),
        'type'=>'raw'
    )
),

我试图用谷歌搜索它,但我找不到任何有效的答案:(

PS:karyawan = 员工,anak = 儿童。

4

1 回答 1

0

您只获得第一个相关值,因为您在函数的 foreach 循环中立即返回它。首先收集所有相关模型,然后返回并使用该数据。

您也可以跳过控制器内的额外功能。如果您使用 Gii,它应该已经为您设置了适当的 Employee HAS_MANY 子关系,因此您可以使用它来为您正在查看的每个 Employee 模型提取所有相关模型。请参阅下面的快速示例

员工模型:

public function relations()
{
    return array(
        'children' => array(self::HAS_MANY, 'Child', 'employee_id'),
    );
}

查看文件,将员工模型传递给 CDetailView:

$this->widget('zii.widgets.CDetailView', array(
    'data' => $model,
    'attributes'=>array(
        array(
            'name' => 'Children',
            'value' => function ($data) {
                // Get all related children using the relation defined in the Employee model and use CHtml::listData to store data inside the $children variable as an array using `id` as key and `child_name` as value
                $children = CHtml::listData($data->children, 'id', 'child_name');
                // Return names as a comma separated list
                return implode(', ', $children);
            },
            'type'=>'raw'
        )
    )
);

我的表/列名可能与您所拥有的不匹配,但希望这会有所帮助。

于 2015-05-15T23:47:58.250 回答