【问题标题】:Display HAS_MANY relation data in DetailView yii2在 DetailView yii2 中显示 HAS_MANY 关系数据
【发布时间】:2015-11-23 22:58:58
【问题描述】:

我想知道是否可以在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')
        ],
    ],
]) ?>

无论如何我都会出错,但我想知道这可能吗?我在这里做错了什么??

【问题讨论】:

    标签: yii2 has-many detailsview


    【解决方案1】:

    在DetailView中,item的值只能是一个值。因此,您可以预先填充该值。

    $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】:

      如果您的模型包含hasMany() 函数,例如getCategories() 或其他任何内容,您只需为您的DetailView 指定非常简约的代码。另外,我正在使用 clojure。

      [
          'attribute' => 'categories',
          'value' => function ($model)
          {
              return implode(', ', $model->getCategories()->select('label')->column());
          }
      ],
      

      【讨论】:

        猜你喜欢
        • 2015-11-19
        • 2016-05-05
        • 2016-07-13
        • 1970-01-01
        • 2015-03-31
        • 1970-01-01
        • 2016-03-23
        • 2020-08-19
        • 1970-01-01
        相关资源
        最近更新 更多