ZF2 использует несколько TableGatway в одном модуле

У меня есть одна проблема. Я не знаю, как использовать несколько таблиц и объединить запрос в ZF2.

Я использую Service Manager и TableGateway для модели. Но в этом всегда используется одна таблица. Как я могу использовать несколько таблиц в одном контроллере или модели?

Здесь я использую Module.php файл и настроить таблицу шлюза. Когда я добавляю еще один табличный шлюз, это дает мне ошибки.

public function getServiceConfig()
 {
     return array(
         'factories' => array(
             'User\Model\UserTable' =>  function($sm) {
                 $tableGateway = $sm->get('UserTableGateway');
                 $table = new UserTable($tableGateway);
                 return $table;
             },
             'UserTableGateway' => function ($sm) {
                 $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                 $resultSetPrototype = new ResultSet();
                 $resultSetPrototype->setArrayObjectPrototype(new User());
                 return new TableGateway('user', $dbAdapter, null, $resultSetPrototype);
             },
         ),
     );
 }

Мне нужно вставить userItems в пользовательском контроллере с помощью UseritemTable.php под User/Model/UseritemTable, Как мне этого добиться?

Error message
Zend\Mvc\Controller\PluginManager::get was unable to fetch or create an instance for getUseritemTable

Обновлен Module.php

public function getServiceConfig()
     {
         return array(
             'factories' => array(
                 'User\Model\UserTable' =>  function($sm) {
                     $tableGateway = $sm->get('UserTableGateway');
                     $table = new UserTable($tableGateway);
                     return $table;
                 },
                 'UserTableGateway' => function ($sm) {
                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                     $resultSetPrototype = new ResultSet();
                     $resultSetPrototype->setArrayObjectPrototype(new User());
                     return new TableGateway('user', $dbAdapter, null, $resultSetPrototype);
                 },
                 'User\Model\UseritemTable' =>  function($sm) {
                     $tableGateway = $sm->get('UseritemTableGateway');
                     $table = new UseritemTable($tableGateway);
                     return $table;
                 },
                 'UseritemTableGateway' => function ($sm) {
                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                     $resultSetPrototype = new ResultSet();
                     $resultSetPrototype->setArrayObjectPrototype(new Useritem());
                     return new TableGateway('useritem', $dbAdapter, null, $resultSetPrototype);
                 },
             ),
         );
     }

UserController.php под этим userItemAction

public function userItemAction()
     {


        $form->get('submit')->setValue('Add');
        $request = $this->getRequest();

         if ($request->isPost()) {
            $item = new Useritem();
            $data = $request->getPost()->toArray();  
            $form->setData($data);
            if($form->isValid()){
                 $item->exchangeArray($form->getData());
                 $this->getUseritemTable()->saveItem($item); // while saveItem cause error using getUseritemTable()


            }

         }

        return array('form' => $form);

     }

Вот мой код для User\Model\UseritemTable.php

namespace User\Model;

 use Zend\Db\TableGateway\TableGateway;

 class UseritemTable
 {
     protected $tableGateway;

     public function __construct(TableGateway $tableGateway)
     {
         $this->tableGateway = $tableGateway;
     }

     public function fetchAll()
     {
         $resultSet = $this->tableGateway->select();
         return $resultSet;
     }


     public function saveItem(User $item)
     {
         $this->tableGateway->insert($item);
     }


 }

0 ответов

Другие вопросы по тегам