Как работать с двумя таблицами в Zend Framework 2?

Приветствую!
Для работы с моделями создается отдельный файл модели, например, /Model/someTable.php.
Далее, посредством фабрики мы создаем обертку для работы с этой таблицей:
'factories' => array(
                'Some\Model\SomeTable' => function($sm)
                {
			$dbAdapter = $sm->get('adapter');
			$tableGateway = new TableGateway('table', $dbAdapter);
			$table = new SomeTable($tableGateway);
                        return $table;
		},
        )

Таким образом получается, что мы работаем с конкретной таблицей. Но мне необходимо в пределах класса SomeTable получить содержимое другой таблицы. Неужели для этого нужно создавать отдельный файл модели и фабрику?
  • Вопрос задан
  • 2495 просмотров
Пригласить эксперта
Ответы на вопрос 1
Symbi0t
@Symbi0t Автор вопроса
Нашел одно решение.
В фабрике, при создании обертки, в конструктор класса (SomeTable) вторым аргументом передавать адаптер:
'factories' => array(
                'Some\Model\SomeTable' => function($sm)
                {
			$dbAdapter = $sm->get('adapter');
			$tableGateway = new TableGateway('table', $dbAdapter);
			$table = new SomeTable($tableGateway, $dbAdapter);
                        return $table;
		},
        )

Для того, чтобы в пределах этого класса была возможность создать отдельные sql-запросы.
Получилось примерно следующее:
namespace Some\Model;

use Zend\Db\Sql\Sql;
use Zend\Db\TableGateway\TableGateway;

class SomeTable
{
	protected $dbAdapter;
	protected $tableGateway;

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

        public function someAction()
        {
	        $sql = new Sql($this->dbAdapter);
		$select = $sql->select();
		$select->from('another_table');
		$select->where(array('id' => 1));

		$statement = $sql->prepareStatementForSqlObject($select);
		$results = $statement->execute();
		
		return ($results->count()) ? $results->current() : null;
         }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы