Biz bir envanter izleme sistemi geliştiriyoruz. Temelde biz emir yerleştirildiği bir order
tablo var. Bir sipariş ödenir zaman, 0
den durum değişiklikleri 1
. Bu tablo başka bir tabloda birden fazla çocuğu var order_items
.
Bu ana yapıdır.
CREATE TABLE order(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT UNSIGNED,
status INT(1),
total INT UNSIGNED
);
CREATE TABLE order_items(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
order_id INT UNSIGNED,
article_id INT UNSIGNED,
size enum('s', 'm', 'l', 'xl'),
quantity INT UNSIGNED
);
Şimdi, biz satın almalar için benzer mimarisi ile bir stocks
tablo var. Bu yapıdır.
CREATE TABLE stock(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
article_id INT UNSIGNED
);
CREATE TABLE stock_items(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
stock_id INT UNSIGNED,
size enum('s', 'm', 'l', 'xl'),
quantity INT(2)
);
Ana fark stocks
no status
alanı olmasıdır. What we are looking for is a way to sum each article size from stock_items
, sonra da order_items
burada Order.status = 1
her makale boyutunu özetlemek ve bizim mevcut envanter bulmak için bu öğeleri hem çıkartmak. Strong>
Bu, tek bir sorgudan almak istiyorum tablo:
Size | Stocks | Sales | Available
s | 10 | 3 | 7
m | 15 | 13 | 2
l | 7 | 4 | 3
Başlangıçta biz complex find conditions kullanarak abouth düşündüm, ama belki de yanlış bir yaklaşımdır.
Bu doğrudan katılmak değil beri Ayrıca, oldukça zor olduğu ortaya çıkıyor.
Bu, biz her öğe için hisse senedi toplam almak zorunda koddur.
function stocks_total($id){
$find = $this->StockItem->find('all', array(
'conditions' => array(
'StockItem.stock_id' => $this->find('list', array('conditions' => array('Stock.article_id' => $id)))
),
'fields' => array_merge(
array(
'SUM(StockItem.cantidad) as total'
),
array_keys($this->StockItem->_schema)
),
'group' => 'StockItem.size',
'order' => 'FIELD(StockItem.size, \'s\', \'m\' ,\'l\' ,\'xl\') ASC'
));
return $find;
}
Teşekkürler.