如果我使用
$query = $this
->select()
->from(array('a' => 'aanvragen'))
->join(array('v' => 'verloven'),
'v.aanvraag_id = a.id' ,array())
->where('a.personeelslid_id = :personeelslid_id')
->where('v.type = 3')
->bind(array(
'personeelslid_id' => $this->_personeelslid->id
))
;
return $this->fetchAll($query, array('aanvragen','verloven'));
由于record(s)
,我得到了正确的verloven(v)
但没有来自表array()
的数据。
但如果我删除空数组,如:
$query = $this
->select()
->from(array('a' => 'aanvragen'))
->join(array('v' => 'verloven'),
'v.aanvraag_id = a.id' )
->where('a.personeelslid_id = :personeelslid_id')
->where('v.type = 3')
->bind(array(
'personeelslid_id' => $this->_personeelslid->id
))
;
return $this->fetchAll($query, array('aanvragen','verloven'));
我收到错误:
选择查询无法与其他表连接。
如何从两个表中获取数据?
答案 0 :(得分:2)
假设您使用的是zf 1+,您可以从模型中进行以下操作,
$sql=$this->select()
->setIntegrityCheck(false)
->from(array('a' => 'aanvragen'),array('field1','field2'))
->join(array('v' => 'verloven'),'v.aanvraag_id = a.id',array('field3'))
->where('a.personeelslid_id = :personeelslid_id')
->where('v.type = 3')
->group('fieldname')
->order('fieldname');
$resultSet = $this->fetchAll($sql);
return $resultSet;
您需要将setIntgrityCheck设置为false才能加入选择查询。 希望这会有所帮助..
答案 1 :(得分:1)
AFAIK,如果您真正需要的是跨桌的话,那么您应该从不设置setIntegrityCheck(false)
。
执行此操作的正确方法是使用Zend_Db_Adapter
:
$query = $this
->getAdapter()
->select()
->from(array('a' => 'aanvragen'))
->join(array('v' => 'verloven'),
'v.aanvraag_id = a.id' ,array())
->where('a.personeelslid_id = :personeelslid_id')
->where('v.type = 3')
->bind(array(
'personeelslid_id' => $this->_personeelslid->id
))
;
return $this->getAdapter()->fetchAll($query, array('aanvragen','verloven'));
这背后的原因是,您正在使用的(假设您的模型从Zend_Db_Table_Abstract
扩展)是表上下文。意思是,你告诉框架,你想要使用特定的表,而你不关心其他表。
如果你想进行连接,你应该在上下文阶梯中加强,并使用 Db 上下文,这可以通过getAdapter()
方法获得。< / p>