У меня есть несколько элементов FilteringSelect в моем приложении Zend Framework, которые работают нормально, но они основаны на простых запросах.
Теперь мне нужно создать FilteringSelect, который позволит мне выбрать идентификатор одногово время отображения текста поля в связанной таблице, то есть у меня есть две таблицы, связанные с groomservices и groomsercedures (т.е. groomprocedures.groomProceduresID имеет много groomservices.procedure).Форма, которую я пытаюсь создать, предназначена для таблицы встреч, которая имеет много значений groomservices.groomServicesID.Я хочу, чтобы пользователь мог видеть имя процедуры при сохранении значения groomservices.groomServicesID с помощью FilteringSelect.
Пока я не смог этого сделать, поскольку мой 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');
Заранее большое спасибо,
Грэхем
PS Не забудьте упомянуть, что я пробовал следующий запрос в mysql и дал мне то, что яМне кажется, что запрос Doctine оценивается так же.
select groomservices.groomservicesID,groomprocedures.groomprocedure from groomprocedures left join groomservices on groomprocedures.groomproceduresID =groomservices.groomProcedure
Но я не уверен, правильно ли я отформатировал запрос в Doctrine.
РЕДАКТИРОВАТЬ вотношение к комментариям фламмона
Хорошо, я установил следующий код, но я все еще не вижу ничего для отображения.
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();
}
}
Я уверен, что вина лежит на мне.