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示例的主要内容,如果未能解决你的问题,请参考以下文章