我正在做这样的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+