Вот некоторые вещи, которые вы можете попробовать, чтобы заставить работать левое соединение, а также улучшить безопасность.
Я обычно строю свои операторы выбора по многим строкам, поэтому мне нравится помещать их в переменную Для отладки я просто закомментирую ненужные мне строки.
$select = $firmobj->select()->from('country');
Вы захотите setIntegrityCheck(false)
, потому что вы, вероятно, не будете изменять и фиксировать результаты запроса. Вот цитата из документации ZF об этом.
Zend_Db_Table_Select в основном используется для ограничения и проверки
так что он может применять критерии для допустимого запроса 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);