Doctrine 一元论

Doctrine 一元论,doctrine,zend-framework2,Doctrine,Zend Framework2,我有两个表,我正试图使用zend框架创建一个OneToOne与条令关联,我的错误如下,表结构和实体代码(包括控制器代码)可以在下面找到,知道我为什么会出现这个错误吗 Fatal error: Call to undefined method Closure::getDate() in C:\htdocs\ea2\module\Easchnitstelle\view\easchnitstelle\transactions\index.phtml on line 132 表结构 CREATE TA

我有两个表,我正试图使用zend框架创建一个OneToOne与条令关联,我的错误如下,表结构和实体代码(包括控制器代码)可以在下面找到,知道我为什么会出现这个错误吗

Fatal error: Call to undefined method Closure::getDate() in C:\htdocs\ea2\module\Easchnitstelle\view\easchnitstelle\transactions\index.phtml on line 132
表结构

CREATE TABLE `transaction` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `file_id` int(10) unsigned NOT NULL,
  `meta_data_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10386 DEFAULT CHARSET=utf8$$

CREATE TABLE `transaction_meta_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `meta_data_sender_id` int(10) unsigned NOT NULL,
  `sender_account` float NOT NULL,
  `sum_amounts` float NOT NULL,
  `count` smallint(5) unsigned NOT NULL,
  `date` date DEFAULT NULL,
  `sum_bankcodes` float NOT NULL,
  `sum_accounts` float NOT NULL,
  `type` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10386 DEFAULT CHARSET=utf8$$
以下是我的两个实体:

namespace Easchnitstelle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
* Entity Class representing a Post of our Zend Framework 2 Blogging Application
*
* @ORM\Entity
* @ORM\Table(name="transaction")
* @property int $id
* @property string $file_id
* @property string $meta_data_id
*/
class Transaction
{
   /**
     * @ORM\Id @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
  protected $id;

  /** @ORM\Column(type="integer") */
  protected $file_id;

  /** @ORM\Column(type="integer") */
  protected $meta_data_id;

    /**
     * @ORM\OneToMany(targetEntity="TransactionData", mappedBy="transaction")
     * @ORM\JoinColumn(name="transaction_id", referencedColumnName="id")
     **/
    private $TransactionData;

    /**
     * @ORM\OneToOne(targetEntity="TransactionMetaData", mappedBy="transaction")
     * @ORM\JoinColumn(name="meta_data_id", referencedColumnName="id")
     **/

    private $TransactionMetaData;

    public function __construct() {
        $this->TransactionData = new ArrayCollection();
        $this->TransactionMetaData = new ArrayCollection();
    }

    public function getTransactionData() {
        return $this->TransactionData;
    }

    public function setTransactionData($TransactionData){
        $this->TransactionData = $TransactionData;
        return $this;
    }

    public function getTransactionMetaData() {
        return $this->TransactionMetaData;
    }

    public function setTransactionMetaData($TransactionMetaData){
        $this->TransactionMetaData = $TransactionMetaData;
        return $this;
    }

      public function setId($id){
        $this->id = $id;
        return $this;
      }

      public function getId(){
        return $this->id;
      }

      public function setFileId($file_id){
        $this->file_id = $file_id;
        return $this;
      }

      public function getFileId(){
        return $this->file_id;
      }

      public function setMetaDataId($meta_data_id){
        $this->meta_data_id = $meta_data_id;
        return $this;
      }

      public function getMetaDataId(){
        return $this->meta_data_id;
      }
}

以及:


这种关系是1:1,而不是1:n。为什么要使用
foreach
关键字

在我看来,代码应该是这样的:

foreach($Transactions as $transaction) {

  $metadata = $transaction->getTransactionMetaData();

  echo $metadata->getDate();
}

使用
getTransactionMetaData()

不需要foreach,Jurian是正确的。检索1:1关系时,不需要使用
foreach
,因为您可以使用getter方法立即获取数据。只有当您检索一个集合(如1:n关系)时,您才会使用
foreach
,因为条令将为您提供一个数据集合。
        foreach($Transactions as $t){
        $amount = '';
        foreach($t->getTransactionData() as $t_data){
            //echo $amount = $t_data->getPurposes();
        }
        //die;
        //echo get_class($t->getTransactionData());
        //$tm_data = $t->getTransactionMetaData();

        foreach($t->getTransactionMetaData() as $tm_data){
        //echo get_class($t->getTransactionMetaData());

            $date = $tm_data->getDate();
            echo $date;
            die;
        }
        $data[] = array($amount);
    }   
foreach($Transactions as $transaction) {

  $metadata = $transaction->getTransactionMetaData();

  echo $metadata->getDate();
}