Doctrine - 通过一个查询从两个表中获取数据

时间:2010-12-05 12:12:09

标签: join doctrine

有人可以通过基本的Doctrine查询来帮助我吗?我刚刚将一个大的Orders表拆分为mysql中的单独'Customers'和'Orders'表。我现在在我的Codeigniter / Doctrine应用程序中设置了两个表:

<?php

class Orders extends Doctrine_Record {

public function setTableDefinition() {
    $this->hasColumn('order_date', 'string', 10);
    $this->hasColumn('item_code', 'string', 10);
    $this->hasColumn('invoice_number', 'string', 11);
    $this->hasColumn('item_name', 'string', 30);
    $this->hasColumn('item_type', 'string', 15);
    $this->hasColumn('item_size', 'integer', 1);
    $this->hasColumn('item_price', 'integer', 3);
    $this->hasColumn('item_quantity', 'integer', 3);
    $this->hasColumn('item_total_price', 'integer', 5);
    $this->hasColumn('item_b_order', 'integer', 1);
    $this->hasColumn('order_total_items', 'integer', 5);
    $this->hasColumn('order_total', 'integer', 6);
    $this->hasColumn('cust_id', 'integer', 4);
    $this->hasColumn('hallmark', 'integer', 1);
}
public function setUp() {
    // setup the join with the Customers table, linking cust_id in this table with id in Customers table
    $this->hasOne('Customers', array(
        'local' => 'cust_id',
        'foreign' => 'id'
    ));
    $this->setTableName('orders');
}   
}

<?php

class Customers extends Doctrine_Record {

public function setTableDefinition() {
    $this->hasColumn('cust_name_one', 'string', 30);
    $this->hasColumn('cust_name_two', 'string', 30);
    $this->hasColumn('cust_address', 'string', 50);
    $this->hasColumn('cust_country', 'string', 30);
    $this->hasColumn('cust_business', 'string', 30);
    $this->hasColumn('cust_email', 'string', 30);
    $this->hasColumn('cust_phone', 'string', 30);
    $this->hasColumn('special_req', 'string', 200);
}

public function setUp() {
    $this->hasMany('Orders as Order', array(
        'local' => 'id',
        'foreign' => 'cust_id'
    ));

    $this->setTableName('customers');
}
}

之前的查询是:

$q = Doctrine_Query::create()
    ->select('u.*')
    ->from('Orders u')
    ->groupBy('u.invoice_number');

            $orders = $q->fetchArray();
            $vars['orders'] = $orders;

现在,我基本上只想说“订单”表中的所有内容,其中“订单”表中的cust_id与“客户”表中的“id”字段匹配,并且按“发票编号”字段中的“发票编号”字段进行分组。 '订单'表。

我搜索过文档,但无法正常工作。非常感谢任何帮助。

非常感谢,

马特

1 个答案:

答案 0 :(得分:5)

我不确定,如果我完全理解你的问题。但是,如果我这样做,请尝试以下方法:

$q = Doctrine_Query::create()
    ->select('o.*, c.*')
    ->from('Orders o')
    ->innerJoin('o.Customers c')
    ->groupBy('o.invoice_number');

(请注意,我已将u切换为o。)