1

zendフレームワーク1.12を使用しています。次のクエリを実行します。

"SELECT name,(select count(*) from  org_quote_template_items where org_quote_template_items.quote_template_id = org_quote_templates.`id` ) as total_line_item FROM `org_quote_templates`"

モデルファイルでは、このように作成しました。以下は私のモデルファイルです。

    class default_Model_DbTable_QuoteTemplates extends Zend_Db_Table_Abstract
{
    /**
     * Name of the original db table
     *
     * @var string
     */
    protected $_name = 'org_quote_templates';


    public function getAllTemplate($where){
        $select = $this->select();        
        $subquery = " (SELECT COUNT(*) FROM  org_quote_template_items WHERE org_quote_template_items.quote_template_id = org_quote_templates.`id` )";

        $select->from(array($this), array('org_quote_templates.*','total_line_items' => new Zend_Db_Expr($subquery)));

        $select = $select->where('organization_id = ?',$where['org_id']);

        $adapter = new Zend_Paginator_Adapter_DbSelect($select);
        $paginator = new Zend_Paginator($adapter);
        $paginator->setItemCountPerPage(
                Zend_Registry::get('config')->paginator->general);
        pr($adapter);
        exit;
    }
}

コードを実行すると、次のエラーが発生します。"例外'Zend_Db_Table_Select_Exception'メッセージ'選択クエリは別のテーブルと結合できません'"

どうしたらいいか教えてください。

4

3 に答える 3

4

リクエストにエラーがあります。あなたが持っている必要があります:

    $select = $this->select ();
    $subquery = "(SELECT COUNT(*) FROM  dtempls WHERE order_id = orders.id)";

    $select->from ($this, array (
        'id',
        'total_line_items' => new Zend_Db_Expr ($subquery)
    ));
于 2012-10-17T16:13:01.853 に答える
1

私はあなたがsetIntegrityCheck(false)それを達成するために使用しなければならないと思います。このリンクを確認してください

于 2012-10-17T09:01:23.663 に答える
0

あなたはzendでこの方法を試すことができます

$this->select()
->setIntegrityCheck(false)
->from(array('oqt' => 'org_quote_templates'),array('total_line_item'))
->joinLeft(array('oqti' => 'org_quote_template_items'), 'oqti.quote_template_id = oqt.id', array(count(*) as count))   
于 2012-10-17T13:05:11.583 に答える