使用sqldataprovider

时间:2016-01-25 04:14:35

标签: yii2 dataprovider

请帮助我在使用sqldataprovider时不知道如何获取关系表。任何人都懂得如何使用关系模型?

$model = new Finalresult();
$searchModel = new FinalresultSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);

$dataProvider = new SqlDataProvider([
   'sql' => 'SELECT finalresult.bib,
            finalresult.series_id,
            finalresult.category_id,
            GROUP_CONCAT(DISTINCT finalresult.point ORDER BY series.serie_seri_no DESC) AS seriPoint 
            FROM finalresult, series GROUP BY finalresult.bib',
    'key' => 'bib',
]);

我正在尝试获取关系表:

'attribute'=>'category_id', 
'width'=>'300px',
'value'=>function ($model, $key, $index, $widget) { 
     return $model->category->category_name;
},

然后尝试非对象

2 个答案:

答案 0 :(得分:2)

您不能使用与SqlDataProvider的关系,因为每个结果都会显示为数组,例如:

[
    'id' => 1,
    'name' => 'Some name',
    'category_id' => 1,
],

例如,您可以将category_id作为`$ model ['category_id']进行访问。

SqlDataProvider适用于非常复杂的查询,您的查询可以轻松编写为ActiveQuery,您可以使用ActiveDataProvider并获得所有优势(关系等)。< / p>

您可以按ID找到类别,但它会被延迟加载,这意味着查询量乘以行数。

使用ActiveDataProvider和关系,您可以使用预先加载并减少查询量。阅读official docs中的更多内容。

答案 1 :(得分:0)

Grid Columns example in documentation

尝试将“值”更改为

'value'=> function($data) { 
     return $data['category']['category_name'];
}