Yii ActiveRecord 的via和viaTable示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Yii ActiveRecord 的via和viaTable示例相关的知识,希望对你有一定的参考价值。

Yii中,将两个不相关的表利用中间表关联有via和viaTable两种方法,这里通过用户权限查询来进行示例。

    技术分享

关系如上,需要建立三个表 用户表 权限表

用户表

技术分享

数据:

技术分享

权限表

技术分享

数据:

技术分享

关联表

技术分享

数据:

技术分享

然后创建权力模型

<?php

namespace app\models;

use yii\db\ActiveRecord;

class Power extends ActiveRecord
{
    public static function tableName()
    {
        return ‘power‘;
    }
}

用户模型

<?php

namespace app\models;

use yii\db\ActiveRecord;
use app\models\Power;

class Users extends ActiveRecord
{
    public static function tableName()
    {
        return ‘users‘;
    }

    public function getPower()
    {
        return $this -> hasMany(Power::class, [‘id‘ => ‘power_id‘]) -> viaTable(‘users-power‘, [‘user_id‘ => ‘user_id‘]);
    }
}

关联模型:

<?php

namespace app\models;

use yii\db\ActiveRecord;

class UserPower extends ActiveRecord
{
    public static function tableName()
    {
        return ‘users-power‘;
    }
}

控制器代码

<?php

namespace app\controllers;

use yii\web\Controller;
use app\models\Users;
use app\models\Power;

class UserController extends Controller
{
    public function actionIndex()
    {
        //查询user_id为6的用户权限  
        $user = Users::findOne([‘user_id‘ => 6]);
        print_r( $user -> getPower() -> asArray() -> all());
    }
}

运行结果:

技术分享

 其中用户模型中通过viaTable来通过关联表查询

$this -> hasMany(Power::class, [‘id‘ => ‘power_id‘]) -> viaTable(‘users-power‘, [‘user_id‘ => ‘user_id‘]);

各个数组字段参数含义,hasMany第二个数组中,键名为前面的Power::class对应的模型id字段,值为关联表中前面Power::class的id对应的字段,即power表中的id对应关联表中的power_id, viaTable第二个参数数组,键名为关联表中的字段,值为当前primaryModel对应的字段,即关联表中的user_id对应当前user表中的user_id。

via方法

via参数为AR类中定义的关联名,修改用户模型:

<?php

namespace app\models;

use yii\db\ActiveRecord;
use app\models\Power;
use app\models\UserPower;

class Users extends ActiveRecord
{
    public static function tableName()
    {
        return ‘users‘;
    }
    //通过getUserPower来进行操作
    public function getUserPower()
    {
        return $this -> hasMany(UserPower::class, [‘user_id‘ => ‘user_id‘]);
    }


    public function getPower($uid = 6)
    {
        return $this -> hasMany(Power::class, [‘id‘ => ‘power_id‘]) -> via(‘userPower‘);
    }
}

运行:

技术分享

 

以上是关于Yii ActiveRecord 的via和viaTable示例的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中的事件与动画 (你的明天Via Via)

genesis2000如何挑VIA孔

gcc-via-nvcc 是不是矢量化这些总和和最大减少?

手机via浏览器有声音没视频

Via板载声卡底噪严重播放卡顿的解决方法

深度学习图像标注工具VGG Image Annotator (VIA)使用教程