【问题标题】:Has_many relation in DetailViewDetailView 中的 Has_many 关系
【发布时间】:2015-11-19 03:22:14
【问题描述】:

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

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

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

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

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

关系如下:

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

【问题讨论】:

    标签: yii2 detailview


    【解决方案1】:

    DetailView 不接受可调用的“值”。您需要在调用 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 一起使用,然后从那里调用它。

    【讨论】:

    • 感谢您的回答,但至少对我而言,DetailView 更改了值字符串以安全地显示标签。例如 string='test@email.com
      test2@email.com
      ' 转换为 'test@email.com<br>test2@email.com<br>'而且我不知道如何禁用它。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多