如何在zend框架2中加入多个on子句

Meh*_*san 10 zend-framework2

我正在做这样的sql到zend框架sql模式.

SELECT 
    jobs . *,
    c.id AS cid,
    c.name AS name,
    c.companyImage AS companyImage,
    c.logo AS logo,
    count(app.userId) AS t_app,
    app.applyStatus AS applyStatus,
    app.userId AS appUserId
FROM
    jobs
        LEFT JOIN
    companies AS c ON jobs.companyName = c.id
        LEFT JOIN
    applicants AS app ON jobs.id = app.jobId AND app.applyStatus = 1
WHERE
    jobs.ownerId = 16 AND jobs.draftId != 0 
GROUP BY jobs.id
ORDER BY jobs.id DESC
LIMIT 3 
Run Code Online (Sandbox Code Playgroud)

对于这个sql,我已经为zend framework 2编写了这段代码

$adapter = $this->tableGateway->getAdapter();
        $sql     = new Sql($adapter);

        $select = $sql->select();
        $select->from('jobs')
                ->join(array('c' => 'companies'), 'jobs.companyName = c.id', array('cid' => 'id', 'name', 'companyImage', 'logo'), 'left')
                ->join(array('app' => 'applicants'), ' jobs.id = app.jobId AND app.applyStatus = 1', array('t_app'     => new Expression('count(app.userId)'), 'applyStatus', 'appUserId' => 'userId'), 'left')
                ->where("jobs.ownerId ={$userId} AND jobs.draftId != 0")
                ->group('jobs.id')
                ->order('jobs.id DESC')
                ->limit(3);

        $statement = $sql->getSqlStringForSqlObject($select);
        $results   = $adapter->query($statement, $adapter::QUERY_MODE_EXECUTE);
Run Code Online (Sandbox Code Playgroud)

但是没有正常工作,它给出了如下信息.

SQLSTATE[42S22]: Column not found: 1054 Unknown column '1' in 'on clause'
Run Code Online (Sandbox Code Playgroud)

And*_*rew 16

问题是这部分:

app.applyStatus = 1
Run Code Online (Sandbox Code Playgroud)

该框架正在转义1,就好像它是一个列名,1.

您还需要将此部分包含在Expression中

new Expression('jobs.id = app.jobId AND app.applyStatus = 1')
Run Code Online (Sandbox Code Playgroud)

我认为在连接方法的'ON'参数中使用表达式可能取决于您使用的ZF2的版本,我认为它已添加2.1+