В настоящее время я новичок в Yii и у меня есть некоторые проблемы с моим приложением.
У меня 2 AR (Сотрудник и Дети) с отношениями Сотрудник has_many Дети. Теперь, когда мы идем в поле зрения сотрудника (в представлении&id = blablabla не в индексе), я хочу перечислить всех детей, которые есть у сотрудника.
Я сделал функцию в классе 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 = дети.
Вы получаете только первое связанное значение, потому что вы возвращаете его сразу внутри цикла 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'
)
)
);
Мои имена таблиц / столбцов, вероятно, не совпадают с тем, что у вас есть, но, надеюсь, это поможет.
Других решений пока нет …