如何使用 query() 方法获取 joined table 的数据

How to get data of joined table using query() method

如果我使用 query(),我在获取连接 table 的数据时遇到问题。 我没有得到产品 table 的数据,如何在不使用 Active record 的情况下使用 query() 解决这个问题? 这是我的数据库 table 结构

        category table
        +--------------------------+
        | cId | added  | category  |       
        +-----+--------+-----------+
        |  1  | 1.2.20 |  PC       |
        |  2  | 1.7.20 | electron  |
        +-----+--------+-----------+

        product table
        +--------------------------+
        | id  |  cId   |  cost     |       
        +-----+--------+-----------+
        |  1  |   1    |  3000     |
        |  1  |   2    |  9000     |
        +-----+--------+-----------+

我的模型

    protected $table = 'category';

    public function showProduct()
    {
        $sql = "SELECT 
                     category.*, COALESCE(SUM(product.cost),0) as price 
                FROM category 
                JOIN product 
                ON product.cId = category.cId
                GROUP BY category.cId
            ";
        $this->db->query($sql);
        return $this;
    }

我的控制器

    public function index()
    {
            $result = $this->model->showProduct();
            echo "<pre>";
            print_r($result->asObject()->paginate(1));  
            
            //pagination
            $pager = $this->model->showProduct()->pager->links();
    }

我得到的结果

    Array
    (
        [0] => stdClass Object
            (
                [cId] => 1
                [added] => 1.2.20
                [category] => PC
            )

        [1] => stdClass Object
            (
                [cId] => 2
                [added] => 1.7.20
                [category] => electron
            ),

    )
$sql="SELECT category*,product* FROM category INNER JOIN product.cid=category.id WHERE category.id";

您需要运行此代码。

SELECT category.cId,category.added,category.category,product.id,COALESCE(SUM(product.cost),0) as price
FROM category,product
WHERE category.cId=product.cId
GROUP BY category.cId;

如果您使用的是 CodeIgniter-4,那么您可以使用 Query Builder Class.

轻松编写此代码

我通过在函数中设置此 table 属性 找到了解决方案。

型号

$protected $table = array("default bd table here");

public function showProduct()
{
    $this->table = array('category');
    
    $sql = "SELECT 
                 category.*, COALESCE(SUM(product.cost),0) as price 
            FROM category 
            JOIN product 
            ON product.cId = category.cId
            GROUP BY category.cId
        ";
    $this->db->query($sql);
    return $this;
}

我的控制器

public function index()
{
        $result = $this->model->showProduct();
        
        //pagination
        $pager = $this->model->showProduct()->pager->links();
}