оставил соединение в рамках Zend - PullRequest
1 голос
/ 21 декабря 2011

Я новичок в ZF и хочу присоединиться к таблице с именем country на country.id = firm_dtl.firm_country

$firmobj->fetchAll($firmobj->select($this)->where("firm_name like '$alpha%'")->order('firm_name'));

Как я могу это сделать.Я пытаюсь с этим кодом: -

$firmobj->select($this)->joinLeft(array("c"=>"country"), "c.id = firm_dtl.firm_country","c.name")->where("firm_name like '$alpha%'")->order('firm_name');

Ответы [ 2 ]

3 голосов
/ 21 декабря 2011

Вот некоторые вещи, которые вы можете попробовать, чтобы заставить работать левое соединение, а также улучшить безопасность.

Я обычно строю свои операторы выбора по многим строкам, поэтому мне нравится помещать их в переменную Для отладки я просто закомментирую ненужные мне строки.

$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);
2 голосов
/ 21 декабря 2011

Третий параметр функции joinLeft должен быть массивом столбцов, которые вы хотите получить.

$firmobj->select($this)
        ->joinLeft(array("c"=>"country"), "c.id = firm_dtl.firm_country", array("c.name"))
        ->where("firm_name like '$alpha%'")
        ->order('firm_name');

Кроме того, лучший способ - использовать функцию where следующим образом:

->where("firm_name like ?", $alpha . "%")

Это более безопасное решение.

...