喂!我只是想知道你们在zend框架中使用连接表的意见。
当然,您可以通过定义referenceMap和dependentTables和stuff,或使用
来使用关系setIntegrityCheck(false)
在db select()中。 setIntegrityCheck版本对我来说似乎有点脏,但是另一个版本不适合大型查询并加入很多表...
我是一名PHP开发人员已有5年了,他是zend框架的新手,只想为我的第一个项目找到方向。
感谢!!!
答案 0 :(得分:0)
我个人在各处使用它们。我通常要做的是设置一个参考图,然后使用调用该关系的getX()定义模型。
class Model_Content extends Zend_Db_Table_Row_Abstract
{
public function getComments($showInactive = false)
{
$select = $this->_table->select();
if (!$showInactive) {
$select->where('comment_active = \'y\'');
}
return $this->findDependentRowset('Model_DbTable_Comment', null, $select);
}
}
答案 1 :(得分:0)
很好的方法......据我所知,在ZF中只有select()的东西可以获得一个行集,其中包括来自2个或更多表的数据,对吧?例如,我可以拥有一个用户,该用户有一个图像和一个帐户。两者都在单独的表格中。
当我使用findDependentRowset时,无法获得如下结果:
username =>汤姆
imagepath => /images/tom.jpg
accounttype =>自由
在一个对象中,对吗?或者我错过了什么?谢谢你的帮助!!
答案 2 :(得分:0)
就个人而言,我到处都使用setIntegrityCheck(false)。是的,它有点脏,但它是KISS,并且更容易编写这样的复杂连接查询。
答案 3 :(得分:0)
我也在使用setIntegrityCheck(false),因为就像Richard已经说过的那样,它是KISS,它是构建大型查询的唯一选择。使用select()的另一个好处是,你可以回应它。
通过这种方式,您可以检查自己的工作,这在使用referenceMap时并不那么容易......
答案 4 :(得分:0)
findDependentRowset / findParentRow方法非常公平,除非您执行大量数据查询。根据过去的经验,使用这些方法调用另一个数据库查询,即使它之前已经执行过,我已经在Web和数据库服务器之间建立了大量的数据流量。在那种特殊情况下,然后需要将应用程序转换为使用join方法。
但是,findDependentRowset和findParentRow方法的优点是允许您从连接表中调用新Zend_Db_Table_Row对象上的相同方法。
rtmilker:findDependentRowset应该返回一个Zend_Db_Table_Rows数组,所以在这种情况下:
foreach($myTableAdapter->findDependentRowset('New_Table_Class', 'rule/[null]', $select) as $dependentRowObject){
Zend_Debug::dump($dependentRowObject->toArray());
}
findParentRow方法显然不需要foreach语句;与fetchRow()/ fetchAll()方法相同的东西。