簡體   English   中英

如何從 model A 在視圖 B Yii2 中獲取數據

[英]How to get data from model A in view B Yii2

我對 Yii 2 很陌生,我目前正在嘗試在 GridView 的User視圖中顯示來自Teams GridView的數據。 在 Yii1 中,我使用了帶有$data變量的 function。 在 Yii2 中,它似乎不是這樣工作的。

我在/user/index.php中嘗試了以下內容

<?php

use yii\helpers\Html;
use yii\grid\GridView;

/* @var $this yii\web\View */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = Yii::t('app', 'Users');
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="user-index">

    <h1><?= Html::encode($this->title) ?></h1>

    <p>
        <?= Html::a(Yii::t('app', 'Create User'), ['create'], ['class' => 'btn btn-success']) ?>
    </p>


    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            // ['class' => 'yii\grid\SerialColumn'],
            // 'iduser',
            'username',
            'surname',
            'givenname',
            'email:email',
            'mobile',
            'admin:boolean',
            'language',
            // Below is what I have been trying to do so far...
            ['class' => 'yii\grid\DataColumn',
             'label' => 'Teams',
             'value' => 'getTeams($data-teams)'
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>


</div>

<?php
// And this is the function I use. In Yii1 it worked just fine.
function getTeams($data) {
    $tmp = "";foreach ($data as $team) {
      $tmp .=$team['name'].", ";
    }
    return trim($tmp, ", ");
  }
?>

我一直在環顧四周,但似乎無法找到解決方案。 基本上我只是希望顯示用戶所在的團隊。 有一個名為UserHasTeam的表,其中保存了團隊和用戶的 ID。

我對如何 go 關於整個事情有點迷茫。 任何幫助是極大的贊賞。

我假設您在用戶 model 中正確設置了與團隊 model 的關系。 如果您不知道如何設置關系,請參閱指南的通過連接表的關系部分。

您可以在DataColumn$value屬性中使用閉包來控制用於列的值。

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        // ... other columns ...
        [
            'label' => 'Teams',
            'value' => function($model) {
                $tmp = "";
                foreach ($model->teams as $team) {
                    $tmp .= $team->name .", ";
                }
                return trim($tmp, ", ");
            }
        ],
    ],
]); ?>

您可能還想考慮使用預先加載來一次加載所有相關的,而不是為網格中的每個用戶運行查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM