小伙儿 2014-08-21 14:08:01 25811次浏览 19条评论 31 4 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 了,呵呵

原文链接: http://blog.sina.com.cn/s/blog_88a65c1b0101ixy7.html

发布 扩展 关联查询
  • 评论于 2014-08-22 08:25 举报

    请教一下,customer.id前面的customer是不是表名?

    4 条回复
    评论于 2014-08-22 10:32 回复

    恩,customer是 数据表的 model 文件名 明明知道你还问

    评论于 2014-08-24 15:47 回复

    @小伙儿: 如果有表前缀,还能这么用吗?这里好像不是model文件名。

    评论于 2015-10-16 11:31 回复

    Customer::find()->joinWith('orders')->where(['{{%customer}}.id' => '1'])->all(); 是数据库名,这样写解决表前缀

    评论于 2017-02-04 17:13 回复

    没有看明白。如果想在model里面调用的话应该如何联表的话怎么使用。因为已经有数据了。无法在创建关联。总是报错。

  • 评论于 2014-08-23 10:05 举报

    呵呵

    13 条回复
    评论于 2014-08-23 13:47 回复

    意味深长的笑啊,呵呵

    评论于 2014-08-25 16:42 回复

    呵呵

    评论于 2014-10-14 20:10 回复

    呵呵,我晕 你是怎么越过 10 个字符限制的啊??

    评论于 2016-01-26 15:50 回复

    呵呵

    评论于 2016-03-02 17:19 回复

    呵呵

    评论于 2016-03-02 17:20 回复

    妈蛋,只是实验一下

    评论于 2016-06-12 12:22 回复

    呵呵

    评论于 2016-06-12 12:22 回复

    呵呵

    评论于 2016-08-16 16:55 回复

    呵呵

    评论于 2016-09-19 16:43 回复

    呵呵

    评论于 2016-10-12 17:38 回复

    呵呵

    评论于 2017-04-14 16:56 回复

    呵呵

    评论于 2天前 回复

    呵呵

  • 评论于 2014-09-24 20:33 举报

    小伙子哥越来越牛掰了。

    1 条回复
    评论于 2014-10-05 23:02 回复

    哎呀,这都要仰仗舰长大人啊,哈哈哈,我就是虾兵蟹将一个

  • 评论于 2014-11-18 17:18 举报

    这个是查询了几次,比拼接left outer join的sql语句 要快吗

  • 评论于 2015-05-11 15:00 举报

    where(['customer.id' => '1'])->all();
    这个是只查出 customer.id 为 1 的所有数据,我需要 不止为1 的所有数据,怎么写?

    2 条回复
    评论于 2015-05-11 15:00 回复

    就是 id 为1 ,2 ,3 , 4 等等 都 查询出来?

    评论于 2015-05-11 15:01 回复

    小伙儿大神 这样链表查询怎么写?

  • 评论于 2015-06-16 16:33 举报
    public function get**Orders**()
    {
        /**
        * 第一个参数为要关联的字表模型类名称,
        *第二个参数指定 通过子表的 customer_id 去关联主表的 id 字段
        */
        return $this->hasMany(Order::className(), ['customer_id' => 'id']);
    }
    

    get后面的orders是自己起的参数名?还是关联的另一个的model名(类名)? 请教一下。

    1 条回复
    评论于 2015-06-16 16:41 回复

    已经搞定,谢谢。

  • 评论于 2015-07-01 15:49 举报

    发个yii1的关联查询可以吗?比如:我想通过主题抓用户名该怎么操作?一张用户表,一张主题表user_id字段做外码。

    1 条回复
    评论于 2016-01-13 11:21 回复

    model中定义relations,然后一样 A::model()->with('b')->findAll();

  • 评论于 2015-10-10 23:27 举报

    请教,如果是跨库关联怎么操作呢?
    用户的信息表在库1,
    用户所管理的信息在库2,
    这样在库2的model中写关联会报出找不到表的错误,因为他用的是当前model的库(库2),而用户在库1中

    2 条回复
    评论于 2016-09-30 17:40 回复

    你好,这个问题你解决了么?我也遇到这个问题了,求教

    评论于 2016-12-14 18:02 回复

    暂时还没有,那个项目是学习yii2用的 后来用的单库

  • 评论于 2015-10-21 16:54 举报

    呵呵

  • 评论于 2016-01-26 15:50 举报

    呵呵

  • 评论于 2016-03-23 11:23 举报

    呵呵,紫薯补丁

  • 评论于 2016-04-18 00:53 举报

    问题是如果用json输出$orders 就会把orders丢失掉是怎么回事

  • 评论于 2016-06-15 17:35 举报

    多库怎么关联?
    请教,如果是跨库关联怎么操作呢?
    用户的信息表在库1,
    用户所管理的信息在库2,
    这样在库2的model中写关联会报出找不到表的错误,因为他用的是当前model的库(库2),而用户在库1中

    3 条回复
    评论于 2016-09-30 17:40 回复

    你好,这个问题你解决了么?我也遇到这个问题了,求教

    评论于 2016-10-08 15:22 回复

    @王赛 分开查的

    评论于 2017-03-16 10:36 回复

    回答这个问题的前提是两个数据库必须在同一台服务器上,关联表的那些步骤都不变,只需要修改要关联的表model的tableName方法

    preg_match("/dbname=([^;]+)/i", static::getDb()->dsn, $matches);
    return $matches[1].'.user';
    
  • 评论于 2016-07-26 17:47 举报

    呵呵

  • 评论于 2016-10-12 11:37 举报

    呵呵

  • 评论于 2016-10-14 17:15 举报

    hasmany()搭配limit()导致分页失效了这个怎么解,前段时间碰到这个问题?

    3 条回复
    评论于 2016-10-14 17:19 回复

    然后只能拆开用toArray又操了一遍

    评论于 2016-10-15 11:55 回复

    稍后 我会看一下这个问题

    评论于 2016-10-17 08:58 回复

    thanks

  • 评论于 2016-11-25 22:45 举报

    库1joinwith库2后,如何在views中表示 库2的数据??

    1 条回复
    评论于 2017-07-21 14:32 回复

    查出来的不是个三维数组吗?

  • 评论于 2017-05-03 16:27 举报

    同问,关联的数据调用不出来。

  • 评论于 2017-07-21 14:28 举报

    真的非常感谢!

您需要登录后才可以评论。登录 | 立即注册
在线
315