我想问你关于使用DetailView
Widget的问题。我想显示连接表中的数据,所以我修改了函数findModel($id)
,如下所示:
protected function findModel($id)
{
if (($model = TPQ::findOne($id)) !== null) {
$data = $model::findBySql("SELECT * FROM tpq, kurikulum, pengurus where tpq.kurikulum_id = kurikulum.kurikulum_id and tpq.pengurus_id = pengurus.pengurus_id and tpq_id = $id")->all();
return $data;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
我在View
中使用该功能 public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
我的观点:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'TPQ_ID',
'TPQ_NAMA',
'TPQ_ALAMAT',
'TPQ_KOORDINAT',
'TPQ_BERDIRI',
'TPQ_AKTIF',
'KURIKULUM_NAMA',
'KURIKULUM_DETAIL:ntext',
'KURIKULUM_AKTIF',
'PENGURUS_NAMA',
'PENGURUS_ALAMAT',
'PENGURUS_NOHP',
],
]) ?>
表TPQ中的字段:'TPQ_ID', 'KURIKULUM_ID', 'PENGURUS_ID', 'TPQ_NAMA', 'TPQ_ALAMAT', 'TPQ_KOORDINAT', 'TPQ_BERDIRI', 'TPQ_AKTIF'
表Pengurus中的字段:'PENGURUS_ID','USER_ID','PENGURUS_NAMA','PENGURUS_ALAMAT','PENGURUS_NOHP'
表Kurikulum中的字段:'KURIKULUM_ID', 'KURIKULUM_NAMA', 'KURIKULUM_DETAIL', 'KURIKULUM_AKTIF'
没有错误,但显示“未设置”值。我怎么修理它?
答案 0 :(得分:4)
您的代码存在一些问题。
1)使用英语进行命名,因为它是国际语言。想想可能支持此代码的其他开发人员,并且根本不了解这种语言。
2)最好用findBySql()
方法替换ActiveQuery
。如果您不使用其功能,为什么需要ActiveRecord
?我在查询中没有看到任何复杂的逻辑,甚至可以使用ActiveQuery
构建复杂的逻辑。
3)对于多个表,您需要指定关系或显示多个DetailView
小部件。此小部件旨在与一个模型一起使用。
4)为了显示关系,您可以使用点符号或getter。
带点符号的示例:
'relation.attributeName',
getter示例:
[
'attribute' => 'attributeName',
'value' => $model->relation->attributeName,
],
阅读官方文档了解更多详情。