Php YII2 SqlDataProvider不工作关系表值

Php YII2 SqlDataProvider不工作关系表值,php,gridview,yii2,csqldataprovider,Php,Gridview,Yii2,Csqldataprovider,这是我的车模: <?php namespace backend\models; use Yii; class Riders extends \yii\db\ActiveRecord { public static function tableName() { return 'riders'; } public function rules() { return [ [['cagories_category_id', 'rider_firstname'

这是我的车模:

<?php

namespace backend\models;

use Yii;

class Riders extends \yii\db\ActiveRecord
{
public static function tableName()
{
    return 'riders';
}

public function rules()
{
    return [
        [['cagories_category_id', 'rider_firstname', 'rider_no_tlpn', 'rider_ucinumber', 'countries_id', 'rider_province', 'rider_city', 'rider_dateofbirth', 'rider_gender'], 'required'],
        [['user_id', 'countries_id'], 'integer'],
        [['rider_dateofbirth', 'cagories_category_id'], 'safe'],
        [['rider_gender', 'rider_status'], 'string'],
        [['rider_firstname', 'rider_lastname', 'rider_nickname', 'rider_province', 'rider_city'], 'string', 'max' => 45],
        [['rider_email', 'rider_sponsor', 'rider_birthcertificate_url', 'rider_parental_consent_url'], 'string', 'max' => 100],
        [['rider_no_tlpn'], 'string', 'max' => 15],
        [['rider_ucinumber'], 'string', 'max' => 11]
    ];
}

/**
 * @inheritdoc
 */
public function attributeLabels()
{
    return [
        'rider_id' => 'rider_id',
        'cagories_category_id' => 'Category Name',
        'user_id' => 'User Team',
        'rider_firstname' => 'Rider Firstname',
        'rider_lastname' => 'Rider Lastname',
        'rider_nickname' => 'Rider Nickname',
        'rider_email' => 'Rider Email',
        'rider_no_tlpn' => 'Rider No Tlpn',
        'rider_ucinumber' => 'Rider Ucinumber',
        'countries_id' => 'Country Name',
        'rider_province' => 'Rider Province',
        'rider_city' => 'Rider City',
        'rider_sponsor' => 'Rider Sponsor',
        'rider_dateofbirth' => 'Rider Dateofbirth',
        'rider_gender' => 'Rider Gender',
        'rider_birthcertificate_url' => 'Rider Birthcertificate Url',
        'rider_parental_consent_url' => 'Rider Parental Consent Url',
        'rider_status' => 'Rider Status',
    ];
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getRegistrations()
{
    return $this->hasMany(Registrations::className(), ['riders_rider_id' => 'rider_id']);
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getCagoriesCategory()
{
    return $this->hasOne(Categories::className(), ['category_id' => 'cagories_category_id']);
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getUser()
{
    return $this->hasOne(User::className(), ['id' => 'user_id']) -> from(user::tableName() . 'ud');
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getUserDesc()
{
    return $this->hasOne(UserDesc::className(), ['desc_id' => 'user_id']) -> from(['ud' => userDesc::tableName()]);
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getCountries()
{
    return $this->hasOne(Countries::className(), ['id' => 'countries_id']);
}
这是我的视图索引:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    // 'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        [
            'label' => 'Category Name',
            'attribute'=>'cagories_category_id',
            'value' => 'cagoriesCategory.category_name', <---Can't work again
        ],
        [
            'label' => 'BIB',
            'attribute'=>'rider_id',
        ],
        'rider_firstname',
        'rider_email:email',
        'rider_no_tlpn',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>
在我使用sqldataprovider之前,它可以从模型函数调用具有关系的函数,使用sqldataprovider之后就不能工作了。如何获取关系表值??? 然后在使用它之前,我可以将rider_firstname和rider_lastname合并为return$model->rider_firstname。骑手的姓;使用后sqldataprovider也不能工作

SqlDataProvider以数组形式返回数据,因此您无法使用$dataProvider->models访问相关对象

您必须使用ActiveDataProvider,或者使用连接条件更改SqlDataProvider的Sql


sql='sql'=>'从骑手内部连接中选择*。Categories::tableName。'as c on c.category_id=riders.Cagorites_category_id其中user_id=:user_id'

是否在模型类中为与其他模型的关系添加get方法。是的,我喜欢此公共函数GetCagoritesCategory{return$this->HasoneCegories::className,['category_id'=>'Cagorities_category_id']}尝试使用此选项,而不是“value'=>“cagoriscategory.category\u name”,此选项为:“value'=>函数$model{return$model->cagoriscategory->category\u name;}尝试获取非objectyeah关系方法返回空对象的属性时出现如下错误。您可以使用如下“值”=>函数$model{if$model->cagoriscategory return$model->cagoriscategory->category_name;else return Not set;}
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    // 'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        [
            'label' => 'Category Name',
            'attribute'=>'cagories_category_id',
            'value' => 'cagoriesCategory.category_name', <---Can't work again
        ],
        [
            'label' => 'BIB',
            'attribute'=>'rider_id',
        ],
        'rider_firstname',
        'rider_email:email',
        'rider_no_tlpn',

        ['class' => 'yii\grid\ActionColumn'],
    ],
]); ?>