Привет Спасибо за чтение,соединить 2 таблицы с помощью tablegateway в ZF2
У меня есть две таблицы (используя tablegateway) PROJET и l_agent_projet Они correcly набор, я могу использовать их для вставки, удаления, обновление и т.д. моя база данных
Я пытаюсь соединить эти две таблицы с помощью этой функции:
public function getAgentsByProject($id_projet)
{
$sql = new Sql($this->tableGateway->adapter) ;
$where = new Where() ;
$where -> equalTo('l_agent_projet.id_projet', $id_projet) ;
$select = $sql->select() ;
$select -> from ($this->tableGateway->getTable())
-> join ('projet' , 'projet.id_projet = l_agent_projet.id_projet')
-> where($where) ;
$result = $this->tableGateway->selectWith($select) ;
return $result ;
}
Но когда я пытаюсь прочитать результат, используя это в одном из моего контроллера:
$test = $this->InitProjectByIDAgentTable()->getAgentsByProject('1') ;
var_dump($test) ;
echo "<br />" ;
foreach ($test as $tmp1):
foreach ($tmp1 as $tmp2):
echo $tmp2 ;
echo '+' ;
endforeach ;
echo "<br />" ;
endforeach ;
Вот что я получил:
object(Zend\Db\ResultSet\ResultSet)#236 (8) { ["allowedReturnTypes":protected]=> array(2) { [0]=> string(11) "arrayobject" [1]=> string(5) "array" } ["arrayObjectPrototype":protected]=> object(Application\Model\LAgentProject)#220 (2) { ["id_agent"]=> NULL ["id_projet"]=> NULL } ["returnType":protected]=> string(11) "arrayobject" ["buffer":protected]=> NULL ["count":protected]=> int(2) ["dataSource":protected]=> object(Zend\Db\Adapter\Driver\Pdo\Result)#235 (8) { ["statementMode":protected]=> string(7) "forward" ["resource":protected]=> object(PDOStatement)#234 (1) { ["queryString"]=> string(179) "SELECT "l_agent_projet".*, "projet".* FROM "l_agent_projet" INNER JOIN "projet" ON "projet"."id_projet" = "l_agent_projet"."id_projet" WHERE "l_agent_projet"."id_projet" = :where1" } ["options":protected]=> NULL ["currentComplete":protected]=> bool(false) ["currentData":protected]=> NULL ["position":protected]=> int(-1) ["generatedValue":protected]=> NULL ["rowCount":protected]=> int(2) } ["fieldCount":protected]=> int(7) ["position":protected]=> int(0) }
1+1+
3+1+
Это говорит [ "FieldCount": защита] => INT (7), но может печатать только первые два поля, соответствующие таблице l_agent_projet. Так что есть проблема.
Но когда я копирую SQL команды генерируемый:
SELECT "l_agent_projet".*, "projet".*
FROM "l_agent_projet"
INNER JOIN "projet" ON "projet"."id_projet" = "l_agent_projet"."id_projet"
WHERE "l_agent_projet"."id_projet" = :'1'"
Он прекрасно работает и печатать все поля.
Я новичок в ZF2, и я не понимаю, что здесь происходит. пс: Работа на PostgreSQL с PDO: PgSQL
Когда я делаю это, я получил: Фатальная ошибка: Вызов функции члена Initialize() на не-объект в/вар/WWW/projet_b/модуль/Application/SRC/Application/Model/LAgentProjectTable .php. И почему я не могу использовать метод toArray для моего $ result в моем контроллере? (Спасибо за быстрый ответ) – aramir
@aramir Я отредактировал свой answer.try, и вы можете использовать метод toArray на нашем наборе результатов. – 2013-05-07 11:12:30
Используя ваше отредактированное решение, у меня есть следующее: Неустранимая ошибка: вызов неопределенного метода Zend \ Db \ Adapter \ Driver \ Pdo \ Результат :: toArray() в/var/www/projet_b/module/Application/src/Приложение/Модель/LAgentProjectTable.php. Но теперь, если я пропущу/не использую метод toArray(), у меня есть все поля ... Не знаю, почему это работает сейчас, какое-то волшебство продолжается с помощью метода selectwith(), который я предполагаю. В любом случае, спасибо за помощь. (извините, не могу проголосовать за вас, мне нужно 15 представителей за это: /) – aramir