【发布时间】:2011-04-23 18:14:06
【问题描述】:
我的 Zend Framework 应用程序中有许多 FilteringSelect 元素运行良好,但它们基于简单查询。
我现在需要创建一个 FilteringSelect,它允许我在显示相关表中的字段文本时选择一个表的 id,即我有两个相关的表groomservices 和groomprocedures(即groomprocedures.groomProceduresID 有很多新郎服务.程序)。 我要创建的表单是用于具有许多新郎服务.groomServicesID 值的约会表。我希望用户能够在使用 FilteringSelect 保存新郎services.groomServicesID 的值时看到程序的名称。
到目前为止,我无法做到这一点,因为我的 FilteringSelect 没有显示任何内容,我确信这可以做到,只是问题在于我对 Zend、Doctrine 和 Dojo 缺乏经验
我不确定我的问题是我的自动完成操作(包括查询)还是 FilteringSelect 元素。
任何人都可以在下面的代码部分中发现我出错的地方,我需要让它工作。
我在控制器中的自动完成操作
public function gserviceAction()
{
// disable layout and view rendering
$this->_helper->layout->disableLayout();
$this->getHelper('viewRenderer')->setNoRender(true);
// get a list of all grooming services IDs and related procedures
$qry= Doctrine_Query::create()
->select('g.groomServicesID,p.groomProcedure')
->from('PetManager_Model_Groomservices g')
->leftJoin('g.PetManager_Model_Groomprocedures p');
$result=$qry->fetchArray();
//generate and return JSON string
$data = new Zend_Dojo_Data('g.groomServicesID',$result);
echo $data->toJson();
}
我的 FilteringSelect 元素代码
// Create a autocomplete select input for the service
$gservice = new Zend_Dojo_Form_Element_FilteringSelect('gapmtService');
$gservice->setLabel('Proceedure');
$gservice->setOptions(array(
'autocomplete' => true,
'storeID' => 'gserviceStore',
'storeType' => 'dojo.data.ItemFileReadStore',
'storeParams' => array('url' => "/groomappointments/appointment/gservice"),
'dijitParams' => array('searchAttr' => 'groomProcedure')))
->setRequired(true)
->addValidator('NotEmpty', true)
->addFilter('HTMLEntities')
->addFilter('StringToLower')
->addFilter('StringTrim');
非常感谢,
格雷厄姆
附:或者不得不提一下,我在 mysql 中尝试了以下查询,并给了我正在寻找的内容,我相信 Doctine 查询的计算结果相同。
select groomservices.groomservicesID,groomprocedures.groomprocedure from groomprocedures left join groomservices on groomprocedures.groomproceduresID =groomservices.groomProcedure
但我不确定我在 Doctrine 中是否正确格式化了查询。
编辑与火烈鸟的 cmets 相关的内容
好的,我已将代码设置为以下内容,但仍然没有显示任何内容。
public function gserviceAction()
{
$ajaxContext = $this->_helper->getHelper('AjaxContext');
$ajaxContext->addActionContexts(array(
'gservice' => 'json'
));
// get a list of all grooming services IDs and related procedures
$qry= Doctrine_Query::create()
->select('g.groomServicesID AS id,p.groomprocedure AS name')
->from('PetManager_Model_Groomservices g')
->leftJoin('g.PetManager_Model_Groomprocedures p');
$this->view->model = (object) array();
$this->view->model->identifier = 'id';
$this->view->model->label = 'name';
$this->view->model->items = array();
$tableRows = $this->dbTable->fetchAll($qry);
foreach ($tableRows as $row) {
$this->view->model->items[] = $row->toArray();
}
}
我确定是我的错。
【问题讨论】:
标签: zend-framework dojo doctrine