小伙儿 2014-08-21 14:08:01 48674次浏览 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 举报

    呵呵

    17 条回复
    评论于 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 回复

    呵呵

    评论于 2017-09-20 14:08 回复

    呵呵

    评论于 2017-10-11 16:02 回复

    呵呵

    评论于 2017-11-09 15:40 回复

    嘎嘎

    评论于 2018-01-15 08:03 回复

    呵呵,呵呵

    评论于 2018-12-24 15:38 回复

    呵呵

  • 评论于 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中

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

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

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

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

    评论于 2019-03-12 22:51 回复


    这个问题现在解决了
    在关联的目标model中设置表明的时候如下
    public static function tableName()

    {
        return '库名.{{%表明}}';
    }
    

    只需要修改关联的model的表明设置,其他的东西不用动
    另外需要注意的是,我分库的时候是用的两个链接身份,两个身份没有相互访问的权限,所以你关联的时候要把关联目标的数据库的查询权限加到你当前库的连接身份权限里面

    , 觉得很赞
  • 评论于 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 举报

    真的非常感谢!

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