在zend框架查询中使用连接

时间:2012-05-24 07:51:50

标签: zend-framework join

我想在zend中使用连接。以下是我的查询

 $select = $this->_db->select()
 ->from(array('evaluationcriteria' => 'procurement_tbltenderevaluationcriteria'),
 array('ScoringCriteriaID','ScoringCriteriaWeight'))
 ->join(array('scoringcriteria' => 'procurement_tbltenderscoringcriteria'),
                               'scoringcriteria.    TenderId=evaluationcriteria.TenderId')
 ->join(array('tenderapplications' => 'procurement_tbltenderapplications','tendersupplier' => 'tblsupplier'),
                               'tenderapplications. TenderInvitationContractorID=tendersupplier.UserID');

我在tendersupplier表中有UserID。但它给出了以下错误: -

找不到列:1054'on clause

中的未知列'tendersupplier.UserID'

3 个答案:

答案 0 :(得分:0)

where条件不是按照你的方式编写的。

我怀疑供应商是一个表,那么它应该是一个数组

此代码未经过测试!

   $select = $this->_db->select()
   ->from(array('evaluationcriteria' => 'procurement_tbltenderevaluationcriteria'),
    array('ScoringCriteriaID','ScoringCriteriaWeight'))
   ->join(array('scoringcriteria' => 'procurement_tbltenderscoringcriteria'),
                           'scoringcriteria.    TenderId=evaluationcriteria.TenderId')
    ->join(array('tenderapplications' =>  'procurement_tbltenderapplications'), array('tendersupplier' => 'tblsupplier'))
    ->where('tenderapplications. TenderInvitationContractorID=tendersupplier.UserID');

答案 1 :(得分:0)

  

我认为不是在连接的同一数组中包含多个故事的正确方法。   尝试这样的代码..

->from(array('evaluationcriteria' => 'procurement_tbltenderevaluationcriteria'),
       array('ScoringCriteriaID','ScoringCriteriaWeight'))
->join(array('scoringcriteria' => 'procurement_tbltenderscoringcriteria'),
      'scoringcriteria.    TenderId=evaluationcriteria.TenderId')
      'scoringcriteria.    TenderId=evaluationcriteria.TenderId')
->join(array('tenderapplications' => 'procurement_tbltenderapplications'),
      'tenderapplications.TenderInvitationContractorID=tblsupplier.UserID');
  

我不确定您是否计划加入tblsupplier表中的值。

答案 2 :(得分:0)

看起来你正试图加入两个表 - >加入,我认为你不能这样做。

从Zend_Db_Select()

加入代码
/**
     * Adds a JOIN table and columns to the query.
     *
     * The $name and $cols parameters follow the same logic
     * as described in the from() method.
     *
     * @param  array|string|Zend_Db_Expr $name The table name.
     * @param  string $cond Join on this condition.
     * @param  array|string $cols The columns to select from the joined table.
     * @param  string $schema The database name to specify, if any.
     * @return Zend_Db_Select This Zend_Db_Select object.
     */
    public function join($name, $cond, $cols = self::SQL_WILDCARD, $schema = null)
    {
        return $this->joinInner($name, $cond, $cols, $schema);
    }

以下是from()

中的注释块
/**
     * Adds a FROM table and optional columns to the query.
     *
     * The first parameter $name can be a simple string, in which case the
     * correlation name is generated automatically.  If you want to specify
     * the correlation name, the first parameter must be an associative
     * array in which the key is the correlation name, and the value is
     * the physical table name.  For example, array('alias' => 'table').
     * The correlation name is prepended to all columns fetched for this
     * table.
     *
     * The second parameter can be a single string or Zend_Db_Expr object,
     * or else an array of strings or Zend_Db_Expr objects.
     *
     * The first parameter can be null or an empty string, in which case
     * no correlation name is generated or prepended to the columns named
     * in the second parameter.
     *
     * @param  array|string|Zend_Db_Expr $name The table name or an associative array
     *                                         relating correlation name to table name.
     * @param  array|string|Zend_Db_Expr $cols The columns to select from this table.
     * @param  string $schema The schema name to specify, if any.
     * @return Zend_Db_Select This Zend_Db_Select object.
     */

也许尝试这样的事情:

 $select = $this->_db->select()
 //FROM table procurement_tbltenderevaluationcriteria AS evaluationcriteria, SELECT FROM
 //COLUMNS ScoringCriteriaID and ScoringCriteriaWeight
 ->from(array('evaluationcriteria' => 'procurement_tbltenderevaluationcriteria'),
 array('ScoringCriteriaID','ScoringCriteriaWeight'))
 //JOIN TABLE procurement_tbltenderscoringcriteria AS scoringcriteria WHERE 
 //TenderId FROM TABLE scoringcriteria == TenderId FROM TABLE evaluationcriteria
 ->join(array('scoringcriteria' => 'procurement_tbltenderscoringcriteria'),
                 'scoringcriteria.TenderId=evaluationcriteria.TenderId')
 //JOIN TABLE procurement_tbltenderapplications AS tenderapplications
 ->join(array('tenderapplications' => 'procurement_tbltenderapplications'))
 //JOIN TABLE tblsupplier AS tendersupplier WHERE TenderInvitationContractorID FROM TABLE 
 // tenderapplications == UserID FROM TABLE tendersupplier
 ->join(array('tendersupplier' => 'tblsupplier'),
   'tenderapplications.TenderInvitationContractorID=tendersupplier.UserID');

you may also need to alter your select() definition to allow joins

//this will lock the tables to prevent data corruption
$this->_db->select(Zend_Db_Table::SELECT_WITHOUT_FROM_PART)->setIntegrityCheck(FALSE);

我希望我正确地阅读你的意图,这应该会让你更接近,如果不是所有的那样。 (一个提示,使用较短的别名......)