1. plan_payment_type:
id
plan_id
2. plan
id
payment_period
Это внешний ключ между plan_payment_type.plan_id
и plan.id
. В моем коде я знаю $plan_payment_type_id.
Моя задача - выбрать payment_period
.
Шаги:
plan_id
из plan_payment_type
payment_period from
plan
с выбранным plan_id
Как я могу сделать это с помощью одного запроса в Zend Framework? Большое вам спасибо.
Следующий оператор 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);
Прежде всего я бы организовал их по-другому. Разве это не plan.types, который должен иметь plan.id. Это нелогично. У вас есть таблица с параметрами plan_types, у которой есть plan.id и имя plan.name, и это отношение находится в таблице плана через plan.type_id.
Эти зависимости решаются следующим образом:
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 Class функцию:
public function type() {
return $this->findParentRow('Plan_Type');
}
и для получения всех планов типа x в классе строк Plan_type
public function entries() {
return $row->findDependentRowset('Plan');
}
Tomalak
ответ лучше для меня. Спасибо, Elzo Valugi
.
plan_id
для plan_payment_type
не имеет смысла для меня.