我想将另一个表中的SQL列添加到我的Propel查询中,但我无法使用正常的“ - > withColumn”语句获得此列。第二个表没有通过外键与第一个表连接,但它对于第二个表中的第一个条目中的每个条目都有。两个表之间的连接是来自另外两个表的两个ID
为了更好地理解,这是我的表格:
项:
FAVORIT:
专家和特遣队:
我希望条目表中的所有条目都有一个额外的列位置。每个条目都存在一个优先权。使用SQL,此查询没有问题:
SELECT *, (SELECT position FROM favorit AS f WHERE e.expert_id = f.expert_id AND e.contingent_id = f.contingent_id) AS position FROM entry AS e
但我不知道如何使用Propel创建查询。 我试着这样做了:
EntryQuery::create()
->filterByExpertId(1)
->withColumn("select position from favorit AS f where e.expert_id = f.expert_id and e.contingent_id = f.contingent_id", '_favorit_id', 'type: int')
->find();
但是Propel给了我一个错误
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select position from favorit AS f where e.expert_id = f.expert_id and e.continge' at line 1' in D:\Entwicklung\htdocs\zeiterfassung\vendor\propel\propel\src\Propel\Runtime\Adapter\Pdo\PdoStatement.php:57 Stack trace: #0 D:\Entwicklung\htdocs\zeiterfassung\vendor\propel\propel\src\Propel\Runtime\Adapter\Pdo\PdoStatement.php(57): PDOStatement->execute(NULL) #1 D:\Entwicklung\htdocs\zeiterfassung\vendor\propel\propel\src\Propel\Runtime\Connection\StatementWrapper.php(194): Propel\Runtime\Adapter\Pdo\PdoStatement->execute(NULL) #2 D:\Entwicklung\htdocs\zeiterfassung\vendor\propel\propel\src\Propel\Runtime\ActiveQuery\Criteria.php(2633): Propel\Runtime\Connection\StatementWrapper->execute() #3 D:\Entwicklung\htdocs\zeiterfassung\vendor\propel\propel\src\Propel\Runtime\ActiveQuery in D:\Entwicklung\htdocs\zeiterfassung\vendor\propel\propel\src\Propel\Runtime\ActiveQuery\Criteria.php on line 2639
当条目表中存在另一个表的外键(例如contingent_id或带有计算列)时,从另一个表添加列没有问题:
EntryQuery::create()
->filterByExpertId(1)
->join('Entry.Contingent')
->withColumn('Contingent.name','_contingentName')
->withColumn("LEFT(TIMEDIFF(TIMEDIFF(
{timeEnd {1}} {timeBegin {1}} {暂停{1}}
答案 0 :(得分:0)
我找到了解决问题的方法:
$result = EntryQuery::create()
->filterByExpertId($id)
->join('Entry.Contingent')
->join('Contingent.Favorit')
->where('Favorit.expert_id = ?', $id)
->withColumn('Favorit.position','_position')
->find();
有了这个,我得到了正确的答案。但我还有一个问题:
如果条目中存在相应的专家和条件但没有偏好,那么此条目将不会显示我的实际查询。我想在这些情况下作为额外的这个条目,但是具有一些默认值的位置,如null或0(零)。