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示例的更多相关文章
- yii ActiveRecord
在活动记录里自定义属性(数据表里没有的属性), 起初没有注意到问题. 在这个继承了activeRecord的模型中, 还自定义了很多方法, 此为前提. 出现的问题是: 使用属性获取不到数据库的字段 ...
- Yii ActiveRecord用法记录备忘
ActiveRecord 使用方法 Example1 in查询 $criteria = new CDbCriteria(); $criteria->select = $select; $crit ...
- Yii ActiveRecord生命周期
- Yii表单模型使用及以数组形式提交表单数据
按Yii文档里的描述,Yii在处理表单的一般过程是: 创建表单对应的模型类,设置字段验证规则 创建表单提交对应的action,处理提交的内容 在视图中创建表单form 在刚刚的一个小项目里,想使用aj ...
- Yii 设置 flash消息 创建一个渐隐形式的消息框
/*适用情况:比如提交一个表单,提交完成之后在页面展示一条提示消息. 控制器里面这样写: 单条消息: */ \Yii::$app->getSession()->setFlash('erro ...
- Yii框架中使用mongodb扩展
前提条件:安装了mongodb数据库 安装了mongo的php驱动 下载Yii的mongo扩展:这是YiiMongoDbSuite的1.3.6版本支持PHP Mongo驱动的版本为1.0.5及以下 下 ...
- yii---判断POST请求
我们在进行数据的提交的时候,很多时候会判断请求状态来进行不同的选择.常见的就是判断POST以及GET的请求方式,下面是YII判断POST请求的代码示例: public function actionP ...
- Yii Framework 开发教程Zii组件-Tabs示例
有关Yii Tab类: http://www.yiichina.com/api/CTabView http://www.yiichina.com/api/CJuiTabs http://blog.cs ...
- PHP : ActiveRecord实现示例
先简单介绍一下Active Record: Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.Acti ...
随机推荐
- [LeetCode] Sort List 链表排序
Sort a linked list in O(n log n) time using constant space complexity. 常见排序方法有很多,插入排序,选择排序,堆排序,快速排序, ...
- [小干货]SqlBulkCopy简单封装,让批量插入更方便
关于 SqlServer 批量插入的方式,前段时间也有大神给出了好几种批量插入的方式及对比测试(http://www.cnblogs.com/jiekzou/p/6145550.html),估计大家也 ...
- github.com使用方法
github.com作为一个开源的代码托管平台,非常适合创建自己的代码库,也适合从别人已有项目fork自己的私有库:如果想私有托管,需要缴费使用. 创建自己代码库 在个人主页面,点击右上角+号,选择N ...
- CSS3常用属性(边框、背景、文本效果、2D转换、3D转换、过渡、有过渡效果大图轮播、动画)
CSS3边框: 1.CSS3圆角:border-radius 属性--创建边框线的圆角 <body style="font-size:24px; color:#60F;"& ...
- C语言中struct位域的定义和使用
位域的定义和使用 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又 ...
- (转) android里,addContentView()动态增加view控件,并实现控件的顶部,中间,底部布局
http://blog.csdn.net/bfboys/article/details/52563089
- 如何使用PullToRefresh
这里有详解 PullToRefresh使用详解(一)--构建下拉刷新的listView PullToRefresh使用详解(二)---重写BaseAdapter实现复杂XML下拉刷新 PullToRe ...
- iOS 读取大文件时候的注意点
转: 使用NSData读取数据,采用NSData的dataWithContentsOfFile:方法.不少人反馈说如果直接使用,将会耗尽iOS的内存. 其实这个是可以改善的. NSData还有一个AP ...
- PHP的CURL
使用CURL完成一个请求: 初始化连接句柄 设置CURL选项 执行并获取结果 释放CURL连接句柄 发送GET请求 function doGetRequest($url,$data,$timeout ...
- Django初识
web框架 Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口.标准样板以及会话管理等,可提升代码的可再用性.简单地说,就是你用别人搭建好的舞台来做表演,用别人做好 ...