Yii2.0 数据库关联查询 [ 2.0 版本 ]
本文章对 2.0 的关联查询做一个简单的介绍。废话不多说了,如果不知道 关联查询是怎么回事,就去看看mysql 去吧
1、设计好关联关系,小伙在这里为大家做了 一个小例子。(Customer 表 model 文件)
public function getOrders()
{
/**
* 第一个参数为要关联的字表模型类名称,
*第二个参数指定 通过子表的 customer_id 去关联主表的 id 字段
*/
return $this->hasMany(Order::className(), ['customer_id' => 'id']);
}
2、在控制器里面调用
$orders = Customer::find()->joinWith('orders')->where(['customer.id' => '1'])->all();
注意看
2.1 joinWith() ---> 关联方法
2.2 orders 这个神奇的参数是怎么出来的那?? yii2.0 里面,关联关系要用 get 开头的函数,例如 public function getOrders()
函数, 在调用的时候,我们去掉get 只写 get 后面的那个单词或者是字母即可。
好的,现在你可以打印一下 $orders 了,呵呵
小伙儿 陕西省
注册时间:2014-08-18
最后登录:2020-06-03
在线时长:295小时3分
最后登录:2020-06-03
在线时长:295小时3分
- 粉丝272
- 金钱2077
- 威望175
- 积分6777
共 19 条评论
请教一下,customer.id前面的customer是不是表名?
恩,customer是 数据表的 model 文件名 明明知道你还问
@小伙儿: 如果有表前缀,还能这么用吗?这里好像不是model文件名。
@╃巡洋艦㊣ Customer::find()->joinWith('orders')->where(['{{%customer}}.id' => '1'])->all(); 是数据库名,这样写解决表前缀
@lissome 没有看明白。如果想在model里面调用的话应该如何联表的话怎么使用。因为已经有数据了。无法在创建关联。总是报错。
呵呵
意味深长的笑啊,呵呵
呵呵
呵呵,我晕 你是怎么越过 10 个字符限制的啊??
@小伙儿 呵呵
@vijay.jie 呵呵
@真相只有一个 妈蛋,只是实验一下
呵呵
呵呵
呵呵
呵呵
@小伙儿 呵呵
@小伙儿 呵呵
呵呵
呵呵
@小伙儿 嘎嘎
呵呵,呵呵
呵呵
小伙子哥越来越牛掰了。
哎呀,这都要仰仗舰长大人啊,哈哈哈,我就是虾兵蟹将一个
这个是查询了几次,比拼接left outer join的sql语句 要快吗
where(['customer.id' => '1'])->all();
这个是只查出 customer.id 为 1 的所有数据,我需要 不止为1 的所有数据,怎么写?
就是 id 为1 ,2 ,3 , 4 等等 都 查询出来?
小伙儿大神 这样链表查询怎么写?
public function get**Orders**() { /** * 第一个参数为要关联的字表模型类名称, *第二个参数指定 通过子表的 customer_id 去关联主表的 id 字段 */ return $this->hasMany(Order::className(), ['customer_id' => 'id']); }
get后面的orders是自己起的参数名?还是关联的另一个的model名(类名)? 请教一下。
已经搞定,谢谢。
发个yii1的关联查询可以吗?比如:我想通过主题抓用户名该怎么操作?一张用户表,一张主题表user_id字段做外码。
model中定义relations,然后一样 A::model()->with('b')->findAll();
请教,如果是跨库关联怎么操作呢?
用户的信息表在库1,
用户所管理的信息在库2,
这样在库2的model中写关联会报出找不到表的错误,因为他用的是当前model的库(库2),而用户在库1中
你好,这个问题你解决了么?我也遇到这个问题了,求教
@38664 暂时还没有,那个项目是学习yii2用的 后来用的单库
@38664
这个问题现在解决了
在关联的目标model中设置表明的时候如下
public static function tableName()
{ return '库名.{{%表明}}'; }
只需要修改关联的model的表明设置,其他的东西不用动
另外需要注意的是,我分库的时候是用的两个链接身份,两个身份没有相互访问的权限,所以你关联的时候要把关联目标的数据库的查询权限加到你当前库的连接身份权限里面
呵呵
呵呵
呵呵,紫薯补丁
问题是如果用json输出$orders 就会把orders丢失掉是怎么回事
多库怎么关联?
请教,如果是跨库关联怎么操作呢?
用户的信息表在库1,
用户所管理的信息在库2,
这样在库2的model中写关联会报出找不到表的错误,因为他用的是当前model的库(库2),而用户在库1中
你好,这个问题你解决了么?我也遇到这个问题了,求教
@王赛 分开查的
@xiaotong 回答这个问题的前提是两个数据库必须在同一台服务器上,关联表的那些步骤都不变,只需要修改要关联的表model的tableName方法
preg_match("/dbname=([^;]+)/i", static::getDb()->dsn, $matches); return $matches[1].'.user';
呵呵
呵呵
hasmany()搭配limit()导致分页失效了这个怎么解,前段时间碰到这个问题?
然后只能拆开用toArray又操了一遍
@夭折的青春 稍后 我会看一下这个问题
@小伙儿 thanks
库1joinwith库2后,如何在views中表示 库2的数据??
查出来的不是个三维数组吗?
同问,关联的数据调用不出来。
真的非常感谢!