Я новичок в CodeIgniter и все еще изучаю его. Я просто хочу спросить, могу ли я добавить все количество акций на основе идентификатора продукта. У меня есть пять таблиц, которые имеют отношения друг с другом, продукт, бренд, категорию, размер и запасы.
Категория, марка, и размер внешнего ключа на таблицу продуктов в то время как таблица продукт внешний ключ на столе запасов.
Каждый раз, когда есть запас, количество и дата определенного продукта будут сохранены в базе данных. Я хочу знать, как суммировать все запасы конкретного продукта и отображать все общее количество.
База данных: таблица продуктов
CREATE TABLE 'products' (
'prod_id' int(11) NOT NULL AUTO_INCREMENT,
'prod_code' varchar(45) NOT NULL,
'prod_desc' varchar(55) NOT NULL,
'brand_id' int(11) DEFAULT NULL,
'category_id' int(11) NOT NULL,
'size_id' int(11) DEFAULT NULL,
'original_price' decimal(10,2) NOT NULL,
'date_registered' timestamp NULL DEFAULT CURRENT_TIMESTAMP,
'date_modified' timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ('prod_id'),
KEY 'category_fk_idx' ('category_id'),
KEY 'size_fk_idx' ('size_id'),
KEY 'brand_id_idx' ('brand_id'),
CONSTRAINT 'brand_id' FOREIGN KEY ('brand_id') REFERENCES 'brand' ('brand_id') ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT 'category_fk' FOREIGN KEY ('category_id') REFERENCES 'category' ('category_id'),
CONSTRAINT 'size_fk' FOREIGN KEY ('size_id') REFERENCES 'sizes' ('size_id')
)
таблица запасов
CREATE TABLE 'stocks' (
'stock_id' int(11) NOT NULL AUTO_INCREMENT,
'product_id' int(11) DEFAULT NULL,
'quantity' double DEFAULT NULL,
PRIMARY KEY ('stock_id'),
KEY 'prod_fk_idx' ('product_id'),
CONSTRAINT 'prod_fk' FOREIGN KEY ('product_id') REFERENCES 'products' ('prod_id') ON DELETE NO ACTION ON UPDATE NO ACTION
)
мой взгляд (product_view.php)
<div class="col-sm-10" id="main">
<div class="table-wrapper">
<div id="content">
<?php echo $this->session->flashdata('successMessage');
echo $this->session->flashdata('errorMessage'); ?>
<legend class="text-danger"><h1>Product List</h1></legend>
<?php $tableAttr = array(
'table_open' => '<table class="table table-responsive table-striped table-hover" id="item_tbl">',
);
$item_table = $this->table->set_heading('No.','PRODUCT CODE','PRODUCT DESCRIPTION','BRAND', 'CATEGORY', 'SIZE','QUANTITY','ACTION');
$item_table = $this->table->set_template($tableAttr);
$num = 0;
foreach ($items as $item) {
$itemName = urlencode($item->prod_desc);
$num++;
$item_table = $this->table->add_row($num, $item->prod_code, $item->prod_desc, $item->brand_name,$item->category_name,$item->size,$item->quantity,"
<a href='".base_url("item/update/$itemName")."'><button class='btn btn-info btn-sm'>EDIT</button></a>
<a href='".base_url("item/stock_in/$itemName")."'><button class='btn btn-primary btn-sm'>STOCK IN</button></a>
");
}
echo $this->table->generate($item_table); ?>
</div>
</div>
</div>
контроллер
public function home () {
$this->load->model('item_model');
$data['items'] = $this->item_model->itemList();
$data['page'] = 'home';
$this->load->view('header',$data);
$this->load->view('side_menu');
$this->load->view('product_view',$data);
$this->load->view('footer');
}
model (item_model.php)
public function itemList () {
$this->load->database();
$this->db->select('p.*,c.category_name,s.size,b.brand_name,t.quantity')
->from('stocks t');
$this->db->join('products p','p.prod_id = t.product_id','full')
->join('category c','p.category_id = c.category_id','full');
$this->db->join('sizes s','p.size_id = s.size_id','full');
$this->db->join('brand b','p.brand_id = b.brand_id','full');
$result=$this->db->get()->result();
return $result;
}
Что я хочу/я хочу показать на своем веб-сайте
+-----+--------------+--------------+-------------------+
| ID | Product Code | Description | Stocks Quantity |
+-----+--------------+--------------+-------------------+
| 001 | 12345 | sample | 12 |
| 002 | 23456 | try | 15 |
+-----+--------------+--------------+-------------------+
В моей таблице базы данных
+-----+--------------+--------------+
| ID | Product_Id | Quantity |
+-----+--------------+--------------+
| 1 | 1 | 10 |
| 2 | 3 | 7 |
+-----+--------------+--------------+
| 3 | 1 | 2 |
| 4 | 3 | 8 |
+-----+--------------+--------------+
Надеюсь, вы поможете парням.
Используйте SUM() и группу:
$this->db->select('p.*,c.category_name,s.size,b.brand_name,SUM(t.quantity) as total_quantity',false)
->from('stocks t')
->join('products p','p.prod_id = t.product_id','full')
->join('category c','p.category_id = c.category_id','full')
->join('sizes s','p.size_id = s.size_id','full')
->join('brand b','p.brand_id = b.brand_id','full')
->group_by('t.product_id');
$result=$this->db->get()->result();
прежде всего, в вашем контроллере вам нужно загрузить модель, как вы это делали
$this->load->model('database');
поэтому измените название модели на что-то еще, чтобы избежать неоднозначности второй: я не знаю, почему вы загружаете ту же модель в классе модели, если вы собираетесь загружать библиотеку базы данных. загрузите его так
$this->load->library('database');