我在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');
}
答案 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),