Вот несколько вещей, которые вы можете попробовать, чтобы заставить левое соединение работать, а также улучшить безопасность.
Обычно я строю свои выражения select во многих строках, поэтому мне нравится помещать их в переменную. Чтобы отлаживать, я просто прокомментирую строки, которые мне не нужны.
$select = $firmobj->select()->from('country');
Вы хотите setIntegrityCheck(false)
, потому что вы, вероятно, не будет меняться и обязывающее результаты запроса. Вот цитата из документации ZF об этом.
The Zend_Db_Table_Select в основном используется для ограничения и проверки так, что он может применять критерии для юридического запроса на выборку. Однако могут быть определенные случаи, когда вам требуется гибкость компонента Zend_Db_Table_Row и не требуется перезаписываемая или удаляемая строка . для этого конкретного случая пользователя можно получить строку или набор строк, передав значение FALSE в setIntegrityCheck().
$select->setIntegrityCheck(false);
Здесь вы присоединиться. Вы можете заменить field1, field2, fieldn полями в таблице firm_dtl, которые вы хотите увидеть в результатах.
$select->joinLeft(array('c' => 'country'), 'c.id = firm_dtl.firm_country', array('field1', 'field2', 'fieldn'));
Использовать подстановку параметров, чтобы избежать атак SQL-инъекций.
$select->where('firm_name LIKE ?', "$alpha%");
И, наконец, заказ результатов и выбор набора строк.
$select->order('firm_name');
$rowSet = $firmobj->fetchAll($select);
Этот код не работает? –