問題描述
在 DetailView yii2 中顯示 HAS_MANY 關係數據 (Display HAS_MANY relation data in DetailView yii2)
我想知道是否可以在 detailview
中顯示一對多的關係數據。例如,用戶可以註冊多個電子郵件。那麼是否可以在 detailview
中顯示一個用戶註冊的所有電子郵件。
我嘗試過類似下面的方法,但它不起作用。
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'username',
'firstname',
'lastname',
'location',
'is_active:boolean',
[
'label' => 'Emails',
'value' => ArrayHelper::map(
UserEmails::find()
‑>where(['user_id'=>$model‑>id])
‑>orderBy('id')
‑>asArray()
‑>all(),
'id', 'email')
],
],
]) ?>
我無論如何我都會出錯,但我想知道這可能嗎?我在這裡做錯了什麼??
參考解法
方法 1:
In DetailView, item's value can be only a value. So you can prepopulate that value.
$email = implode(',',UserEmails::find()‑>select('email')‑>where(['user_id'=>$model‑>id])‑>orderBy('id')‑>asArray()‑>all())
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'username',
'firstname',
'lastname',
'location',
'is_active:boolean',
[
'label' => 'Emails',
'value' => $emails
],
],
]) ?>
方法 2:
If your model contains hasMany()
function, for example getCategories()
or anything, you can just specify the very minimalist code to your DetailView. Also, I am using a clojure.
[
'attribute' => 'categories',
'value' => function ($model)
{
return implode(', ', $model‑>getCategories()‑>select('label')‑>column());
}
],
(by Mike Ross、Fabrizio Caldarelli、Prabowo Murti)