YII的关联查询
先看数据表中的关系是怎样的:
customer表中的关系如下:

order中的表为:

先在customer中获得order的数据,并与之关联,在 helloController.php 中,代码如下
<?php
namespace app\controllers;
use yii\web\Controller;
use app\models\Customer;
use app\models\Order; class HelloController extends Controller {
public function actionIndex()
{
$customer = Customer::find()->where(['name'=>'zhangsan'])->one();
// $orders=$customer->getOrders();//getOrders()是在cunstomer.php中的函数,与下面代码效果一致
$orders = $customer->orders;//只用orders而不声明getOrders()是因为程序会自动使用__get()方法,调用Customer.php中的getOrders()方法。
print_r($orders);
}
}
在 app\models\Customer.php 中的代码为:
<?php
namespace app\models; use yii\db\ActiveRecord;
class Customer extends ActiveRecord{
public function getOrders(){
$orders = $this->hasMany(Order::className(),['customer_id'=>'id'])->asArray();//Order::className()等同于'app\madels\Order'是使用Order.php下面的方法,其中'customer_id'='id'中的id是customer表中id,而不是order表中的id
return $orders;
}
}
在 app\models\Order.php 中的代码为:
<?php
namespace app\models; use yii\db\ActiveRecord;
class Order extends ActiveRecord{ }
程序打印出的效果如图:

然后在order中获得customer中的数据,再与之关联。
helloController中的代码为:
<?php
namespace app\controllers;
use yii\web\Controller;
use app\models\Customer;
use app\models\Order; class HelloController extends Controller {
public function actionIndex()
{
$order = Order::find()->where(['id'=>1])->one();
$customer = $order->customer;
print_r($customer);
}
}
order.php中的代码:
<?php
namespace app\models; use yii\db\ActiveRecord;
class Order extends ActiveRecord{
public function getCustomer() {
$customer= $this->hasOne(Customer::className(),['id'=>'customer_id'])->asArray();
return $customer;
}
}
然后在customer.php中的代码为:
<?php
namespace app\models; use yii\db\ActiveRecord;
class Customer extends ActiveRecord{ }
效果图为:

YII的关联查询的更多相关文章
- yii 之数据库关联查询
<?php namespace app\controllers; use yii\web\Controller; use app\models\Customer; class CustomerC ...
- YII关联查询
原文链接:http://keshion.iteye.com/blog/1607994 一.多表关联的配置 在我们使用 AR 执行关联查询之前,我们需要让 AR 知道一个 AR 类是怎样关联到另一个的. ...
- Yii关联查询(转载)
原文链接:http://keshion.iteye.com/blog/1607994 一.多表关联的配置 在我们使用 AR 执行关联查询之前,我们需要让 AR 知道一个 AR 类是怎样关联到另一个的. ...
- yii2中关联查询
yii2 ActiveRecord多表关联以及多表关联搜索的实现 一个老生常谈的问题.最近通过群里的反馈,觉得很多人还是没有去理解这个问题.今天把这个问题讲明白了,看看yii2 ActiveRecor ...
- Yii2中多表关联查询
准备条件: 1.首先准备两张表: customer(用户表)(id, name) order(订单表)(id, customer_id, price) customer 表和 order 表之间是一对 ...
- Yii Ar model 查询
Ar model 查询 参照表: CREATE TABLE tbl_user ( id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, username VA ...
- JDBC MySQL 多表关联查询查询
public static void main(String[] args) throws Exception{ Class.forName("com.mysql.jdbc.Driver&q ...
- MYSQL基础操作之数据约束与关联查询
一.MYSQL约束 1.默认值约束,当字段没有插入值的时候,mysql自动给该字段分配默认值. 默认值的字段允许为空. 对默认值字段也可以插入null. CREATE TABLE STUDENT( I ...
- C#代码中实现两个表(DataTable)的关联查询(JOIN)
之前通常都是使用SQL直接从数据库中取出表1和表2关联查询后的数据,只需要用一个JOIN就可以了,非常方便.近日遇到一种情况,两个表中的数据已经取到代码中,需要在代码中将这两个表关联起来,并得到它们横 ...
随机推荐
- Android 标签的主题样式
Android平台定义的主题样式: android:theme="@android:style/Theme.Dialog" 将一个Activity显示为对话框模式 •andro ...
- Cacti Install
一.Cacti简介 Cacti是通过snmpget来获取数据,使用RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数.它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查 ...
- Mysql ibdata 丢失或损坏如何通过frm&ibd 恢复数据
mysql存储在磁盘中,各种天灾人祸都会导致数据丢失.大公司的时候我们常常需要做好数据冷热备,对于小公司来说要做好所有数据备份需要支出大量的成本,很多公司也是不现实的.万一还没有做好备份,数据被误删除 ...
- Alarm(硬件时钟) init
http://blog.csdn.net/angle_birds/article/details/17302297 Alarm就是一个硬件时钟,前面我们已经知道它提供了一个定时器,用于把设备从睡眠状态 ...
- bzoj 1588营业额统计(HNOI 2002)
http://www.lydsy.com/JudgeOnline/problem.php?id=1588 splay bottom-up的数组实现. 题意就是给你一组数,求每个数与在其前面且与其最相 ...
- Bean的生命周期
Bean的生命周期 原文:http://997004049-qq-com.iteye.com/blog/1729793 任何一个事物都有自己的生命周期,生命的开始.生命中.生命结束.大家最熟悉的应该是 ...
- 用户 NT AUTHORITY\NETWORK SERVICE 登录失败
Windows server 2003,2008 Web.Config 配置连接sql 使用 win身份验证时: 当连接sql server使用信任连接(参看Web.Config文件)时就会出这个错误 ...
- zoj 3557 How Many Sets II
How Many Sets II Time Limit: 2 Seconds Memory Limit: 65536 KB Given a set S = {1, 2, ..., n}, n ...
- 2016-2017 CT S03E05: Codeforces Trainings Season 3 Episode 5 (2016 Stanford Local Programming Contest, Extended) B
链接:http://codeforces.com/gym/101116 学弟做的,以后再补 #include <iostream> #include <stdio.h> #in ...
- 查看centos是多少位的系统命令
打开命令行 运行下面命令 uname -i 如果是64位系统会显示x86_64 如果显示的是i386则是系统是32位