2010-04-04 2 views
2

인벤토리 추적 시스템을 개발 중입니다. 기본적으로 주문이 접수 된 테이블은 order입니다. 주문이 지불되면 상태는 0에서 1으로 변경됩니다. 이 테이블에는 다른 테이블에 여러 자식이 있습니다. order_items.CakePHP의 인벤토리 수

이것은 주요 구조입니다.

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

이제 인수를 위해 비슷한 아키텍처를 갖춘 stocks 테이블이 있습니다. 이것이 구조입니다.

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

주요 차이점 stocksstatus 필드가 없다는 것이다. 는 우리가 찾고있는 것은 다음 stock_items에서 각 문서의 크기 합계 order_itemsOrder.status = 1에서 각 문서의 크기 합계와 현재의 재고를 찾기 위해이 두 항목을 빼지하는 방법입니다.

우리가 단일 쿼리에서 얻을하려는 테이블 :

Size  | Stocks | Sales | Available 
    s  |  10 |  3 |  7 
    m  |  15 |  13 |  2 
    l  |  7 |  4 |  3 

는 처음에 우리가 complex find conditions를 사용 개황 생각했지만, 아마도 그것은 잘못된 접근입니다.

또한 직접 참여가 아니기 때문에 매우 어렵습니다.

이것은 각 항목의 재고 합계를 검색해야하는 코드입니다.

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

감사합니다. 아마 임시 테이블을 사용하려고 할 것 같은 더 복잡한 여러 단계의 문제에 직면

답변

0

사실, 그건 불가능하다고 생각합니다. 내가 한 일은 두 테이블을 쿼리 한 다음 PHP로 계산하는 것입니다.

0

.

그래서 다음 order_items와 연결 논리를 기반으로 해당 테이블을

는 stock_items의 값 세트와 임시 테이블을 생성하고 업데이트합니다.