2016-07-17 3 views
2

Мне нужно hyrdate несколько объектов в одной форме. Вот что я использую:гидрат несколько объектов zf2

  • Форма выпуска - У меня есть форма, где я называю три fieldsets
  • Fieldset Продукт
  • Promotion Fieldset
  • Категория Fieldset

у меня есть модели для всех необходимые таблицы, вот пример модели продукта:

class Product implements ProductInterface 
{ 
    /** 
    * @var int 
    */ 
    protected $Id; 

    /** 
    * @var string 
    */ 
    protected $Title; 

    /** 
    * @var float 
    */ 
    protected $Price; 

    /** 
    * @var string 
    */ 
    protected $Description; 

    /** 
    * @var string 
    */ 
    protected $Url; 

    /** 
    * @var \DateTime 
    */ 
    protected $DateAdded; 

    /** 
    * @var string 
    */ 
    protected $Image; 

    /** 
    * @var int 
    */ 
    protected $Status; 

    /** 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->Id; 
    } 

    /** 
    * @param int $Id 
    */ 
    public function setId($Id) 
    { 
     $this->Id = $Id; 
    } 

    /** 
    * @return string 
    */ 
    public function getTitle() 
    { 
     return $this->Title; 
    } 

    /** 
    * @param string $Title 
    */ 
    public function setTitle($Title) 
    { 
     $this->Title = $Title; 
    } 

    /** 
    * @return float 
    */ 
    public function getPrice() 
    { 
     return $this->Price; 
    } 

    /** 
    * @param float $Price 
    */ 
    public function setPrice($Price) 
    { 
     $this->Price = $Price; 
    } 

    /** 
    * @return string 
    */ 
    public function getDescription() 
    { 
     return $this->Description; 
    } 

    /** 
    * @param string $Description 
    */ 
    public function setDescription($Description) 
    { 
     $this->Description = $Description; 
    } 

    /** 
    * @return string 
    */ 
    public function getUrl() 
    { 
     return $this->Url; 
    } 

    /** 
    * @param string $Url 
    */ 
    public function setUrl($Url) 
    { 
     $this->Url = $Url; 
    } 

    /** 
    * @return \DateTime 
    */ 
    public function getDateAdded() 
    { 
     return $this->DateAdded; 
    } 

    /** 
    * @param \DateTime $DateAdded 
    */ 
    public function setDateAdded($DateAdded) 
    { 
     $this->DateAdded = $DateAdded; 
    } 

    /** 
    * @return string 
    */ 
    public function getImage() 
    { 
     return $this->Image; 
    } 

    /** 
    * @param string $Image 
    */ 
    public function setImage($Image) 
    { 
     $this->Image = $Image; 
    } 

    /** 
    * @return int 
    */ 
    public function getStatus() 
    { 
     return $this->Status; 
    } 

    /** 
    * @param int $Status 
    */ 
    public function setStatus($Status) 
    { 
     $this->Status = $Status; 
    } 

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

try { 
     $aProduct = $this->productService->findProduct($iId); 
     } catch (\Exception $ex) { 
     // ... 
    } 

$form = new ProductForm(); 
$form->bind($aProduct); 

Во-первых, мне нужно выбрать всю необходимую информацию из БД. Я присоединяюсь к таблицам с тремя таблицами, рекламой и категориями. Я должен вернуть данные контроллеру в качестве объектов и связать их в своей форме, чтобы иметь возможность редактировать на странице просмотра.

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

Буду признателен за все ссылки, которые могут помочь мне или дать мне какие-либо идеи/примеры из реальной жизни.

public function findProduct($Id) 
{ 
    $iId = (int) $Id; 

    $sql = new Sql($this->dbAdapter); 
    $select = $sql->select('product'); 
    $select->join('promotion', 'promotion.ProductId = product.Id', array('Discount', 'StartDate', 'EndDate', 'PromotionDescription' => 'Description', 'PromotionStatus', 'Type'), 'left'); 
    $select->join('producttocategory', 'producttocategory.ProductId = product.Id', array('CategoryId'), 'left'); 
    $select->join('category', 'category.Id = producttocategory.CategoryId', array('ParentId', 'Title', 'Description', 'Url', 'DateAdded', 'Image', 'Status'), 'left'); 

    $where = new Where(); 
    $where->equalTo('product.Id', $iId); 
    $select->where($where); 

    $stmt = $sql->prepareStatementForSqlObject($select); 
    $result = $stmt->execute(); 

    if ($result instanceof ResultInterface && $result->isQueryResult()) { 
     $resultSet = new HydratingResultSet($this->hydrator, $this->productPrototype); 

     return $resultSet->initialize($result); 
    } 

    throw new \Exception("Could not find row $Id"); 
} 

Мне нужно увлажнить результат и вернуть объект, который я буду использовать в контроллере, чтобы связать форму.

+0

Возможно, эта ссылка вам поможет. https://framework.zend.com/manual/2.4/ru/modules/zend.form.collections.html – newage

+0

Благодарим вас за ссылку @newage, но мне нужно убрать результат в картографе, где я выбираю данные из DB. Я присоединяюсь к 3 таблицам, и я должен различать эти три таблицы в модели так или иначе, что я не уверен, как это сделать. Я попытаюсь добавить еще один пример для этого. Еще раз спасибо. – Sezgin

+0

Если ваш проект новый, я рекомендую использовать Doctrine. Если вы хотите использовать Zend \ Db с соединением, вам нужно разобрать все данные из БД и заполнить сущности вручную.У меня есть функциональность. Если вам интересно, я могу описать подробности о моей реализации. – newage

ответ

0
  1. Вы можете заполнить объекты из базы данных вручную.

  2. Если вы хотите заполнить автоматически, необходимо создать карту между базой данных и объектами. Я создал библиотеку для создания карты между БД, а сущности используют аннотации в объектах https://github.com/newage/annotations.

Следующий шаг.

Когда вы получаете разные данные из таблиц. Пример:

SELECT 
table1.id AS table1.id, 
table1.title AS table1.title, 
table2.id AS table2.id, 
table2.alias AS table2.alias 
FROM table1 
JOIN table2 ON table1.id = table2.id 

нужно сделать, foreach по rows и установить данные лиц, сравнивающих строку с именем таблицы и Entity из сгенерированной карте.

Автогенерация дерева сущностей из БД - это мой следующий проект. Но это еще не закончено. https://github.com/newage/zf2-simple-orm.

 Смежные вопросы

  • Нет связанных вопросов^_^