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

    

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

用户表

数据:

权限表

数据:

关联表

数据:

然后创建权力模型

<?phpnamespace app\models;use yii\db\ActiveRecord;class Power extends ActiveRecord
{public static function tableName(){return 'power';}
}

用户模型

<?phpnamespace 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']);}
}

关联模型:

<?phpnamespace app\models;use yii\db\ActiveRecord;class UserPower extends ActiveRecord
{public static function tableName(){return 'users-power';}
}

控制器代码

<?phpnamespace 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类中定义的关联名,修改用户模型:

<?phpnamespace 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');}
}

运行:

转载于:https://www.cnblogs.com/yangxunwu1992/p/5954615.html

Yii ActiveRecord 的via和viaTable示例相关推荐

  1. yii php 弹窗,Yii框架弹出框功能示例

    本文实例讲述了Yii框架弹出框功能.分享给大家供大家参考,具体如下: <?php $this->beginWidget('zii.widgets.jui.CJuiDialog', arra ...

  2. PHP 从菜鸟到大咖的踩坑之路

    https://cloud.tencent.com/developer/article/1464655 电商Sku设计思维 https://xlswriter-docs.viest.me/zh-cn/ ...

  3. php中target用法,Yii使用DbTarget实现日志功能的示例代码

    一:在配置文件的log组件中配置DbTarget 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'cl ...

  4. php yii框架连接数据库,Yii 框架使用数据库(databases)的方法示例

    本文实例讲述了Yii 框架使用数据库(databases)的方法.分享给大家供大家参考,具体如下: 配置数据库连接 ¶ 开始之前,请确保你已经安装了 PHP PDO 扩展和你所使用的数据库的 PDO ...

  5. php detailview,PHP开发框架Yii Framework教程(31) Zii组件-DetailView示例

    CDetailView为某个Model显示详细内容.这个要显示的Model可以为CModel或是关联数组. CDetailView通过配置 attributes来决定Model的那些属性需要显示已经以 ...

  6. Yii Framework 开发教程(32) Zii组件-GridView示例

     CGridView 以表格的形式显示数据,CGridView 也支持分页和排序,CGridView最基本的用法和ListView类型,也是通过设置 data provider,通常是CActiv ...

  7. Yii Framework 开发教程(30) Zii组件-ListView 示例

    CListView可以用来显示列表,CListView支持使用自定义的View模板显示列表的的记录,因此可以非常灵活的显示数据的表,这点有点像Android的ListView:-). CListVie ...

  8. Yii Framework 开发教程(31) Zii组件-DetailView 示例

     CDetailView为某个Model显示详细内容.这个要显示的Model可以为CModel或是关联数组. CDetailView通过配置 attributes来决定Model的那些属性需要显示 ...

  9. Yii Framework 开发教程Zii组件-Tabs示例

    有关Yii Tab类: http://www.yiichina.com/api/CTabView http://www.yiichina.com/api/CJuiTabs http://blog.cs ...

最新文章

  1. 开启ubuntu的SSH服务,使用终端远程控制
  2. 重写描述符(property)魔法方法时可能遇到的问题
  3. Qt中的QMessageBox
  4. 添加github ssh 公钥
  5. 5行代码解决——L1-042 日期格式化 (5分)
  6. 抖音云控_抖音云控/快手云控:引领5G电商短视频新潮流
  7. 泰国能源部携手本土企业打造智慧城市
  8. ubuntu apt-get常用命令
  9. 系统变量之System.getenv()和System.getProperty()
  10. 员工人事档案包括哪些内容?
  11. 小米手机开发者模式怎么打开?简单,只要三步
  12. 蓝桥杯练习题之圆的面积
  13. python应聘项目经历怎么写_简历中、面试中,怎么描述你的工作/项目经历?
  14. 直方图实现快速中值滤波opencv
  15. 动态规划石子排序java_动态规划之石子归并
  16. 微型计算机最大的电路板是,微型计算机系统中最大的一块电路板被称作 。
  17. 常见专业术语名词解释(持续更新)
  18. 记一次华为RH2288-3V _X86架构服务器的操作系统安装
  19. 在phpstudy的环境下,如何配置php虚拟主机。
  20. 大学生HTML作业节日网页 HTML作业节日文化网页期末作业 html+css+js节日网页 HTML学生节日介绍 HTML学生作业网页视频

热门文章

  1. Delphi中文件名函数-路径、名称、子目录、驱动器、扩展名
  2. 《JAVA练习题目8》 编写一个类Person,包含的属性和方法如下: 属性:字符串类型的名字name,字符类型的性别gender,和整型的序号number
  3. mysql的存储引擎种类,mysql 存储引擎,基本数据类型
  4. java用爬虫爬一个页面_使用Java写一个简单爬虫爬取单页面
  5. 非极大值抑制_非极大值抑制(Non-Maximum Suppression)
  6. golang json转结构体中嵌套多个数组_ElasticSearch第六篇:复合数据类型-数组,对象...
  7. python比前端好学吗_前端学习到底难不难?
  8. java ui设计用什么_UI设计是什么?UI怎么设计?
  9. css3 高度最小100%,100%最小高度CSS布局
  10. C++编程进阶9(如何将构造函数和非成员函数虚化、无锁单例模式)