【问题标题】:Active Record, Code Igniter, join table 'users' twiceActive Record,Code Igniter,两次加入表“用户”
【发布时间】:2015-08-04 15:33:17
【问题描述】:

我正在尝试实现几年前在 Ruby on Rails 中所做的一些事情。
现在我正在使用 CodeIgniter 3.0.0。
下面是我想要实现的目标的概述:

表格:

表:用户表:文章 _________________ _______________________________________ |编号 |姓名 | |编号 |描述 |买家 |申请人 | | 1 |约翰 D. | | 1 |电脑鼠标 | 1 | 2 | | 2 |安妮塔 F。

我想实现这个:(或类似的东西)

大批 ( [0] => 标准类对象 ( [id] => 1 [描述] => 'PC 鼠标' [买家] => 标准类对象 ( [id] => 1 [名称] => '约翰 D.' ) [申请人] => stdClass 对象 ( [id] => 2 [名称] => '安妮塔 F.' ) ) )

所以我可以打电话:

回声$文章->描述; //=> 电脑鼠标 echo $article->买家->姓名; //=> 约翰 D. echo $article->申请人->姓名; //=> 安妮塔 F.


我试过了(没有运气):

$this->db->from('articles'); $this->db->join('users', 'articles.buyer = users.id'); $this->db->join('users'.'articles.applicant = users.id'); $objects = $this->db->get()->result_object(); //=> 抛出: 错误 1066: 不是唯一的表/别名:“用户” $this->db->from('articles'); $this->db->join('users', 'articles.buyer = users.id'); $objects = $this->db->get()->result_object(); //=> 返回一个额外的列 'name',其值为 'John D.' 大批 ( [0] => 标准类对象 ( [id] => 1 [描述] => 'PC 鼠标' [买家] => 1 [申请人] => 2 [名称] => '约翰 D.' ) )

我阅读了很多关于 group_by 的信息,但我无法让它发挥作用。
你能帮我解决这个问题吗?
这甚至可能是一个解决方案还是有可能?!

侧面信息

这是我需要的一个精简示例。 我还有很多连接要做。

这是我最终应该拥有的:

购买有很多文章(articles.purchasesID) 文章有一个状态(statusID) 文章有一个品牌(brandID) 购买有一个买家 (usersID) 购买有一个申请人(usersID) 购买有一个状态(statusID) 购买有一个 Delivered_to (usersID) 采购有一个供应商 (suppliersID) 购买有一个顾虑(concernsID // 当我想回显一篇文章的状态时: // 状态有一个 'id' 和 'name' 所以: echo $purchase->article[0]->status->name //=> '处理中' // 或者当我想知道产品交付给谁时: echo $purchase->delivered_to->name //=> 'Carsten'

希望你能帮助我!

【问题讨论】:

    标签: php codeigniter activerecord query-builder codeigniter-3


    【解决方案1】:

    您的多个联接不起作用的原因是您必须为它们提供别名 (source)。获得结果后,您需要对它们进行迭代,以便按照您希望的方式构建对象。

    • 第 1 步:构建您的查询

      $this->db->select('
          a.*,
          bu.name as buyer_name,
          au.name as applicant_name
      ');
      $this->db->from('articles a');
      $this->db->join('users bu', 'a.buyer = bu.id', 'left');
      $this->db->join('users au', 'a.applicant = au.id', 'left');
      $results = $this->db->get()->result();
      
    • 第 2 步:遍历您的结果以构建您想要的对象

      foreach ($results as $res) {
          $buyer_obj = new stdClass();
          $buyer_obj->id = $res->buyer;
          $buyer_obj->name = $res->buyer_name;
          $res->buyer = $buyer_obj;
          unset($res->buyer_name);
      
          $applicant_obj = new stdClass();
          $applicant_obj->id = $res->applicant;
          $applicant_obj->name = $res->applicant_name;
          $res->applicant = $applicant_obj;
          unset($res->applicant_name);
      }
      
    • 第 3 步:检查您的结果

      var_dump($results);
      

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 2012-02-28
      • 2012-11-29
      相关资源
      最近更新 更多