【问题标题】:Inner join in datamapper codeigniterdatamapper codeigniter中的内部连接
【发布时间】:2015-10-03 05:14:31
【问题描述】:

我有两张表productscategories,我想获取所有产品的类别名称。

产品表(产品)

id (auto_increment) | Name(varchar) | category_id(int) | price(decimal)  | user_id(int)

类别表(类别)

 id(auto_increment) | name(varchar)

必填查询: SELECT * FROM products p INNER JOIN categories c ON (p.category_id = c.id) WHERE p.user_id = 1

模型 product.php

class Product extends DataMapper {

var $has_many = array('category');

var $validation = array(
    'name' => array(
        'label' => 'Name',
        'rules' => array('required', 'trim', 'alpha_dash', 'min_length' => 3),
    ),
    'category_id' => array(
        'label' => 'Category Id',
        'rules' => array('required', 'trim', 'alpha_dash'),
    ),
    'price' => array(
        'label' => 'price',
        'rules' => array('required', 'trim', 'alpha_dash'),
    ),
    'quantity' => array(
        'label' => 'quantity',
        'rules' => array('required', 'trim', 'alpha_dash'),
    ),
);

function get_product_from_userid($product_id){

    $product_obj = new Product($product_id);

    $product_obj->category->get();
}
}

模型类别.php

class Category extends DataMapper {
    var $table = 'categories';
    var $has_many = array('product');
}

控制器(用户)

class Users extends CI_Controller {

function Users(){
    parent::__construct();
    $this->load->helper('url');
    $this->load->helper('form');

}
function index(){
    $product_obj = new Product();
    $product_obj->user_id = 1;
    $product_id = 1;
    $product_obj->get_product_from_userid($product_id);
}

}

【问题讨论】:

  • 首先您在on 子句中所需的查询部分不正确,正确的条件将是(c.id=p.category_id),因为您在产品表上加入了类别表。
  • 方法Users()应该是__construct()

标签: php mysql codeigniter datamapper codeigniter-datamapper


【解决方案1】:

Datamapper ORM for CodeIgniter 似乎没有做 INNER JOIN 的能力,默认为 LEFT OUTER JOIN。

因此,我会为您的 INNER JOIN 查询使用 ActiveRecord。

$result_set = $this->db->join('categories', 'categories.id = products.category_id')->where('user_id = 1')->get('products')->result_array();

资料来源:我在工作中使用 DataMapper ORM。

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2014-05-31
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多