DetailView中的Has_many关系

时间:2015-08-25 12:12:21

标签: yii2 detailview

我在gridview中使用了以下代码,它运行正常:

                    ['format' => 'raw',
                'label' => 'Categories',
                'value' => function ($data) {
                    $string = '';
                    foreach ($data['fkCategory'] as $cat) {
                        $string .= $cat->category_name . '<br/>';
                    }
                    return $string;
                }],

这将显示表格单元格中新行的所有项目类别。但是,如果我想在DetailView中显示类似的东西,它就不起作用了。 Detailview给了我一个错误:

  

类Closure的对象无法转换为字符串

那么如何才能在DetailView中访问has_many关系?

关系如下:

    public function getFkCategory()
{
    return $this->hasMany(Categories::className(), ['category_id' => 'fk_category_id'])
        ->via('CategoryLink');
}

2 个答案:

答案 0 :(得分:2)

DetailView不接受可调用的&#39;值&#39;。您需要在调用DetailView之前计算字符串:

$string = '';
foreach ($data['fkCategory'] as $cat) {
     $string .= $cat->category_name . '<br/>';
}
...
'value' => $string,

或创建一个执行此操作的函数:

function getCategories() {
    $string = '';
    foreach ($data['fkCategory'] as $cat) {
        $string .= $cat->category_name . '<br/>';
    }
    return $string;
}
...
'value' => getCategories(),

您甚至可以将函数放在您正在使用的ModelView中,并从那里调用它。

答案 1 :(得分:0)

您可以“使用”DetailView中的函数,如下所示:

'value' => call_user_func(function($model){
                              <your_code_here>
                        }, $model),
相关问题