0

クエリでエラーが発生します。質問は次のとおりです。結合をチェーンできますか?

最初の結合はプライマリテーブルへの結合ですが、2番目の結合はプライマリテーブルに結合されたテーブルへの結合です。これはクエリです:

$query = $this->getDbTable()->select()
            ->from(array('ca' => 'contracts_allotment'),
                    array('id',
                        'contracts_rooms_id' => new Zend_Db_Expr("CONCAT(room_type_desc, '-', room_characteristics_desc)")
                        ))
            ->join(array('cr' => 'contracts_rooms'),
                    'ca.contract_rooms_id = cr.id',
                    array())
            ->join(array('rt' => 'room_types'),
                    'cr.room_id = rt.id',
                    array('room_type_desc'))
            ->join(array('rc' => 'room_characteristics'),
                    'cr.char_id = rc.id',
                    array('room_characteristics_desc'))
            ->where('contract_id = ?', $contractId);

        var_dump($this->getDbTable()->fetchAll($query));die;

私が得ている:

選択クエリは別のテーブルと結合できません」

エラーはZend/Db/Table/Select::assemble()

ここにいくつかの内部アセンブル()があります:

   // Check each column to ensure it only references the primary table
   if ($column) {
       if (!isset($from[$table]) || $from[$table]['tableName'] != $primary) {
           var_dump($from[$table]['tableName'], $primary);die;
           require_once 'Zend/Db/Table/Select/Exception.php';
           throw new Zend_Db_Table_Select_Exception('Select query cannot join with another table');
       }
   }

var_dump()プリント:

string(10) "room_types" string(19) "contracts_allotment"

何か案が?

4

1 に答える 1

1

結合を行うときは、テーブルをロックすることを忘れないでください。

$query = $this->getDbTable()->select()
              ->setIntegrityCheck(false)
              ->from(array('ca' => 'contracts_allotment'),
                    array('id',
                        'contracts_rooms_id' => new Zend_Db_Expr("CONCAT(room_type_desc, '-', room_characteristics_desc)")
                        ))
              ->join(array('cr' => 'contracts_rooms'),
                    'ca.contract_rooms_id = cr.id',
                    array())
              ->join(array('rt' => 'room_types'),
                    'cr.room_id = rt.id',
                    array('room_type_desc'))
              ->join(array('rc' => 'room_characteristics'),
                    'cr.char_id = rc.id',
                    array('room_characteristics_desc'))
              ->where('contract_id = ?', $contractId);

->setIntegrityCheck(false)少なくとも新しいエラーが発生するはずです。

于 2012-12-28T13:44:15.290 に答える