Yii2 gridview三表联接
我是yii2框架中的新手,当我尝试连接两个以上的表时,它没有加载到gridview中 我正在尝试从语言表中获取语言名称,我可以通过userlanguage表获得该表,该表有一个两个字段,如下所示。因此,根据userID,我想获取用户的语言详细信息。 在my中显示语言名称 我的表结构是: 用户表 从这个表中,我将获得userID,它与userlanguage表的userID连接,一个userlanguage表包含两个字段Yii2 gridview三表联接,gridview,yii2,yii2-advanced-app,Gridview,Yii2,Yii2 Advanced App,我是yii2框架中的新手,当我尝试连接两个以上的表时,它没有加载到gridview中 我正在尝试从语言表中获取语言名称,我可以通过userlanguage表获得该表,该表有一个两个字段,如下所示。因此,根据userID,我想获取用户的语言详细信息。 在my中显示语言名称 我的表结构是: 用户表 从这个表中,我将获得userID,它与userlanguage表的userID连接,一个userlanguage表包含两个字段 userID languageID 通过从userlanguage表中获取
userID
languageID
通过从userlanguage表中获取languageID,我必须从language表中显示languageName,该表包含两个字段:
languageID
languageName
usertable包含:
userID
userName
等等
首先,在camelcase中列出您的关系:
getUser(){...}
getLanguages(){...}
然后,在栅格视图中使用关系名称:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'userID',
'userEmail:email',
'languages.languageID',
'languages.languageName',
'userName',
'userMobile',
'userGender',
['class' => 'yii\grid\ActionColumn'],
最后我得到了Yii论坛问题的答案: 请点击以下链接:
现在它是thorws:Getting unknown property:backend\models\Users::LanguageId,这很好,因为您的
getLanguages()
声明中有错误。纠正方法getUsersLanguage()
,然后在getLanguages()
中通过('usersLanguages')使用方法->。Yii2文档关于via:ok我已经将其更改为:$query->joinWith([“user”=>函数($a){$a->from(“users-user”);})$query->joinWith([“userslanguage”=>函数($b){$b->from(“userlanguage userslanguage”);}])$查询->连接([“语言”=>函数($c){$c->from(“语言”);}])代码>并且它没有按照我的要求显示查询,请看这里返回的内容:从
users'LEFT JOIN用户
用户
用户
用户用户ID=用户ID
用户ID左连接用户语言
用户语言关于users
userID
=userslanguage
userID
LEFT-JOINlanguage
在users
languageID
上加入languageID
languageID``你现在正在写这么多无用的代码。您可以删除此select语句,定义正确的关系,这些关系100%工作(为此,我建议阅读一些关于Yii2中ActiveRecord的文档),然后仅对这些关系进行操作,如->joinWith(['languages'])
,->和filterwhere(['languages.languageID'=>12])
,并在GridView中进行操作,如我的回答所示。
yii\data\ActiveDataProvider Object
(
[query] => yii\db\ActiveQuery Object
(
[sql] =>
[on] =>
[joinWith] => Array
(
[0] => Array
(
[0] => Array
(
[users] => Closure Object
(
[static] => Array
(
[callback] =>
[alias] => user
)
[this] => yii\db\ActiveQuery Object
*RECURSION*
[parameter] => Array
(
[$query] =>
)
)
)
[1] => 1
[2] => LEFT JOIN
)
[1] => Array
(
[0] => Array
(
[0] => language
)
[1] => 1
[2] => LEFT JOIN
)
)
[select] =>
[selectOption] =>
[distinct] =>
[from] =>
[groupBy] =>
[join] =>
[having] =>
[union] =>
[params] => Array
(
)
[_events:yii\base\Component:private] => Array
(
)
[_behaviors:yii\base\Component:private] => Array
(
)
[where] =>
[limit] =>
[offset] =>
[orderBy] =>
[indexBy] =>
[modelClass] => backend\models\Users
[with] =>
[asArray] =>
[multiple] =>
[primaryModel] =>
[link] =>
[via] =>
[inverseOf] =>
)
[key] =>
[db] =>
[id] =>
[_sort:yii\data\BaseDataProvider:private] =>
[_pagination:yii\data\BaseDataProvider:private] =>
[_keys:yii\data\BaseDataProvider:private] =>
[_models:yii\data\BaseDataProvider:private] =>
[_totalCount:yii\data\BaseDataProvider:private] =>
[_events:yii\base\Component:private] => Array
(
)
[_behaviors:yii\base\Component:private] =>
)
getUser(){...}
getLanguages(){...}
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'userID',
'userEmail:email',
'languages.languageID',
'languages.languageName',
'userName',
'userMobile',
'userGender',
['class' => 'yii\grid\ActionColumn'],
->joinWith(['languages'])