1

我正在尝试实现几年前在 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'

希望你能帮我!

4

1 回答 1

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);
    

希望这可以帮助 :)

于 2015-08-04T17:39:53.590 回答