在 CDetailView Yii 中打印数组的所有值
Print all values of an array in CDetailView Yii
我目前是 Yii 的新手,我的应用程序存在一些问题。
我有 2 个 AR(员工和 Children),关系是员工 has_many Children。现在,当我们进入 Employee 的视图时(在 view&id=blablabla 中,不在索引中),我想列出 Employee 拥有的所有 children。
我在 EmployeeController class 中创建了一个函数来从我的数据库 children 中检索 children
$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;
}
问题是,它只显示 children 的 1 个数据(确切地说是第一个数据),即使在我的数据库中,员工有 3 个 children。当我尝试计算查询结果时,它显示 3.
我的employee/view是这样的
$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'
)
),
我已经尝试 google 它,但我找不到任何有效的答案:(
PS: karyawan = 员工, anak = children.
您只获得了第一个相关值,因为您在函数的 foreach 循环中立即 returning 了它。首先收集所有相关模型,然后 return 并使用该数据。
您也可以跳过控制器中的额外功能。如果您使用 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'
)
)
);
我的 tables/column 名字可能与您的名字不匹配,但希望这对您有所帮助。
我目前是 Yii 的新手,我的应用程序存在一些问题。
我有 2 个 AR(员工和 Children),关系是员工 has_many Children。现在,当我们进入 Employee 的视图时(在 view&id=blablabla 中,不在索引中),我想列出 Employee 拥有的所有 children。
我在 EmployeeController class 中创建了一个函数来从我的数据库 children 中检索 children
$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;
}
问题是,它只显示 children 的 1 个数据(确切地说是第一个数据),即使在我的数据库中,员工有 3 个 children。当我尝试计算查询结果时,它显示 3.
我的employee/view是这样的
$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'
)
),
我已经尝试 google 它,但我找不到任何有效的答案:(
PS: karyawan = 员工, anak = children.
您只获得了第一个相关值,因为您在函数的 foreach 循环中立即 returning 了它。首先收集所有相关模型,然后 return 并使用该数据。
您也可以跳过控制器中的额外功能。如果您使用 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'
)
)
);
我的 tables/column 名字可能与您的名字不匹配,但希望这对您有所帮助。