2015-02-09 12 views
2

我有三種模型Quotation,QuotationItem和Job。 我的主要目標是在Job控制器中爲Quotation和QuotationItem的表執行左連接。我無法實現它,因爲而不是QuotationItem,作業表正在左連接中使用!加入兩張表並在cakephp中顯示第三個控制器中的數據

 $this->Job->unbindModel(
    array('belongsTo' => array('Quotation','QuotationItem')), true 
); 
      $options = array(
'fields' => array(
    'QuotationItem.id', 
    'QuotationItem.Quot_id', 
    'QuotationItem.item_sno', 
    'QuotationItem.job_desc', 
    'QuotationItem.selected_qty', 
    'QuotationItem.paper_id', 
    'QuotationItem.plate_id', 
    'QuotationItem.design_id', 
    'QuotationItem.ink_id', 
    'QuotationItem.misel_id', 
    'QuotationItem.plate_size', 
    'QuotationItem.paper_size', 
    'QuotationItem.paper_type', 
    'QuotationItem.paper_gsm', 
    'QuotationItem.plate_qty', 
    'QuotationItem.paper_qty', 
    'QuotationItem.ink_qty', 
    'QuotationItem.plate_color', 
    'QuotationItem.ink_color', 
    'QuotationItem.ink_code', 
    'QuotationItem.plate_price', 
    'QuotationItem.paper_price', 
    'QuotationItem.ink_price', 
    'QuotationItem.design_price', 
    'QuotationItem.plate_total', 
    'QuotationItem.paper_total', 
    'QuotationItem.ink_total', 
    'QuotationItem.design_total', 
    'QuotationItem.printing_cost', 
    'QuotationItem.prepress_cost', 
    'QuotationItem.design_cost', 
    'QuotationItem.press_cost', 
    'QuotationItem.folding_cost', 
    'QuotationItem.binding_cost', 
    'QuotationItem.block_cost', 
    'QuotationItem.lamination_cost', 
    'QuotationItem.uv_cost', 
    'QuotationItem.stamping_cost', 
    'QuotationItem.diecutting_cost', 
    'QuotationItem.sewing_cost', 
    'QuotationItem.perfectbind_cost', 
    'QuotationItem.saddlestitch_cost', 
    'QuotationItem.emboss_cost', 
    'QuotationItem.cutting_cost', 
    'QuotationItem.labor_charges', 
    'QuotationItem.others', 
    'QuotationItem.cost_total', 
    'QuotationItem.total_item_sum', 
    'QuotationItem.net_total', 
    'QuotationItem.created', 
    'QuotationItem.modified', 
    'QuotationItem.status', 
    'Quotation.Quot_id', 
    'Quotation.job_item', 
    'Quotation.customer_id', 
    'Quotation.customer_name', 
    'Quotation.customer_phone', 
    'Quotation.customer_email', 
    'Quotation.customer_address', 
    'Quotation.salesperson', 
    'Quotation.pay_terms', 
    'Quotation.contact_id', 
    'Quotation.status', 
    'Quotation.discount', 
    'Quotation.total', 
    'Quotation.created', 
    'Quotation.modified', 
), 
'joins' => array(

    array(

     'table' => 'quotation', 
     'alias' => 'Quotation', 
     'type' => 'left', 
        'conditions' => array('QuotationItem.Quot_id = Quotation.Quot_id'), 
    ) 
), 
'conditions' => array(
    '1', 
));$data = $this->Job->find('all', $options);` 
+0

爲什麼要執行發現的工作模式,如果宣佈我的工作public $uses = array('Job','Quotation','QuotationItem');你不是在尋找喬布斯?你似乎想要做的是執行一個查找左引號加入QuotationItem,是否正確? – 2015-02-09 15:14:11

+0

是的,這是這個想法。但是當我將報價模型加載到作業控制器時,它顯示sql 42000錯誤。表/別名不唯一 – Mimoh2008 2015-02-09 15:41:43

+0

我打算在此處執行的操作是使用連接從報價和報價項中獲取數據,然後將其存儲在作業中 – Mimoh2008 2015-02-09 15:49:41

回答

0

謝謝@Tim讓我瞭解有關模型和控制器。我找到了我的問題的答案。 自從QuotationItem屬於Quotation以來,我在我的QuotationItem模型中使用了連接。

public $belongsTo = array(
    'Quotation' => array(
     'className' => 'Quotation', 
     'foreignKey' => 'Quot_id', 
     'type'=>'left', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

然後我控制器 後,在我用

$quotationItem=$this->QuotationItem->find('all'); 

$this->set(compact('quotationItem')); 

我的附加功能。最後我得到了我的聯接工作

0

您需要在報價上運行查找,而不是在作業上運行。模型綁定到一張桌子上,認爲它們是一個一個。您無法從其他表中找到與執行查找功能的模型無關的內容。

如果您在加載模型時獲得sql 42000 error. Table/alias not unique,則該模型可能已被加載,或者您嘗試使用已被用於別的東西的名稱進行別名 - 這是您無法做到的。

如果您尚未很好地掌握模型關聯,確保您可以從作業控制器訪問所有3個模型的最簡單方法是在作業控制器中聲明public $uses = array('Job','Quotation','QuotationItem');

你去獲得訪問報價放在一邊,不管你想要的方式做的是那麼:

$this->Quotation->find('all',array(
    'fields' => '*', 
    'joins' => array(
     array(
      'table' => 'quotation', 
      'alias' => 'Quotation', 
      'type' => 'left', 
      'conditions' => array(
       'QuotationItem.Quot_id = Quotation.Quot_id' 
      ) 
     ) 
    ) 
)); 
+0

謝謝@tim爲我提供解決方案..我將在明天查看並回到你身邊。 – Mimoh2008 2015-02-09 18:32:13

+0

您好@Tim,您可以向我展示我應該放置上述代碼的位置。我在作業控制器的添加功能中使用了代碼。 – Mimoh2008 2015-02-10 07:27:28

+0

只要您確定您有權訪問Quotation模型,就應該沒問題,如上所述。 – 2015-02-11 13:43:58