Has_many DetailView 中的关系

Has_many relation in DetailView

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

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

这会在 table 单元格内的新行中显示所有项目的类别。但是,如果我想在 DetailView 中显示类似的内容,它是行不通的。 Detailview 给我一个错误:

Object of class Closure could not be converted to string

那么如何访问 DetailView 中的 has_many 关系?

关系如下:

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

DetailView 不接受可调用 'value'。您需要在调用 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(),

您甚至可以将函数放入您正在使用 DetailView 的模型 class 中,然后从那里调用它。

您"can"在DetailView中使用一个函数如下:

'value' => call_user_func(function($model){
                              <your_code_here>
                        }, $model),