Внутреннее объединение в datamapper codeigniter

У меня два стола products а также categoriesЯ хочу получить все продукты с названием их категории.

Таблица продуктов (продукты)

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

Модель category.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);
}

}

1

Решение

Кажется, что Datamapper ORM для CodeIgniter не имеет возможности выполнять INNER JOIN, и по умолчанию используется LEFT OUTER JOIN.

Поэтому я бы использовал ActiveRecord для вашего запроса INNER JOIN.

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

Источник: я использую DataMapper ORM в своей работе.

0

Другие решения

Других решений пока нет …