2010-10-13 58 views
0
1. plan_payment_type: 
    id 
    plan_id 

2. plan 
    id 
    payment_period 

它是plan_payment_type.plan_idplan.id之間的外鍵。在我的代碼中,我知道一個$ plan_payment_type_id。Zend Db Table Double JOIN

我的任務是選擇payment_period。 步驟:

  • 選擇plan_idplan_payment_type
  • 選擇payment_period from​​與選定plan_id

如何與Zend框架中一個查詢做呢? 非常感謝。

回答

2

下面的SQL語句和PHP代碼相互對應:

SELECT 
    t.id AS plan_payment_type_id, 
    p.id AS plan_id, 
    p.payment_period 
FROM 
    plan_payment_type AS t 
    INNER JOIN plan AS p ON p.id = t.plan_id 
WHERE 
    p.id = { SQL query param for $plan_payment_type_id } 


$select = $db->select() 
      ->from(array('t' => 'plan_payment_type'), 
       array('id' => 'plan_payment_type_id')) 
      ->join(array('p' => 'plan'), 'p.id = t.plan_id', 
       array('id' => 'plan_id', 'payment_period')) 
      ->where('p.id = ?', $plan_payment_type_id); 
+0

謝謝。它工作很好,沒有什麼變化。 – pltvs 2010-10-13 07:12:28

1

一切之前,我將採取不同的組織他們。不是應該有plan.id的plan_types。這不合邏輯。你有一個帶有plan.types的表格,其中有一個plan.id和一個plan.name,並且該關係在plan.type_id的計劃表中。

dependencies都解決了這種方式:

class Payment_Plan extends Zend_Db_Table_Abstract 
{ 
    protected $_name   = 'plan'; 
    protected $_referenceMap = array(
     'Plan' => array(
      'columns'   => 'plan_id', 
      'refTableClass'  => 'Plan', 
      'refColumns'  => 'id' 
     ) 

} 

class Plan_Type extends Zend_Db_Table_Abstract 
{ 
    protected $_name   = 'plan_types'; 
    protected $_dependentTables = array('Plan_Type'); 
} 

之後,您可以在PlanRow類有一個函數:

public function type() { 
    return $this->findParentRow('Plan_Type'); 
} 

,併爲獲得X型的所有計劃中Plan_type行類

public function entries() { 
    return $row->findDependentRowset('Plan'); 
} 
+0

'Tomalak'對我來說更好。謝謝,'Elzo Valugi'。 – pltvs 2010-10-13 07:13:34

+0

+1,因爲你對DB佈局是正確的。 'plan_payment_type'上的'plan_id'對我來說也是沒有意義的。 – Tomalak 2010-10-13 07:16:35

+0

我認爲你在$ _referenceMap變量中缺少一個')' – 2011-07-05 18:59:39