Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2延迟加载不';行不通_Php_Symfony_Doctrine Orm_Lazy Loading - Fatal编程技术网

Php Symfony2延迟加载不';行不通

Php Symfony2延迟加载不';行不通,php,symfony,doctrine-orm,lazy-loading,Php,Symfony,Doctrine Orm,Lazy Loading,我在symfony2/doctrine2中遇到延迟加载问题。 我有一个普通对象(例如:type item),这个对象有一个id。如果我在运行时查看这个对象,我会看到id被设置了。图标和金额等其他参数均为空。我知道,这就是延迟加载的工作原理,但是当我调用getters(getIcon)时,什么都没有发生。图标属性仍然为空。我还尝试调用uuu load方法,但没有任何帮助 对不起,忘记密码了 class Character { /** * @ORM\Column(type="integer

我在symfony2/doctrine2中遇到延迟加载问题。 我有一个普通对象(例如:type item),这个对象有一个id。如果我在运行时查看这个对象,我会看到id被设置了。图标和金额等其他参数均为空。我知道,这就是延迟加载的工作原理,但是当我调用getters(getIcon)时,什么都没有发生。图标属性仍然为空。我还尝试调用uuu load方法,但没有任何帮助

对不起,忘记密码了

class Character {
  /**
   * @ORM\Column(type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  protected $id;
  /**
   * @ORM\OneToMany(targetEntity="Entity\Item", mappedBy="character")
   */
  protected $item;

  /*********************************************************************
   * Custom methods
   */

  public function getItem() {
      return $this->item;
  }
}
这就是延迟加载不起作用的对象

class Item {
  /**
   * @ORM\Column(type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  protected $id;

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

  /**
   * @ORM\Column(type="string")
   */
  protected $icon;
}
编辑2:

字符类的构造函数

public function __construct()
{
    $this->item = new \Doctrine\Common\Collections\ArrayCollection();
}

因此,previos对您的初始帖子的评论所指的是,您需要在项目实体中实现一个manytone关系,以使所有内容正常工作

在您的字符实体中,有以下代码行

/**
* @ORM\OneToMany(targetEntity="Entity\Item", mappedBy="character")
*/
protected $item;
这表示您与映射属性“character”中关系的实体项存在关系。在该属性中存储关系。如果查看数据库,将找不到任何存储的关系,因为类项没有描述的映射属性字符。正如gp_sflover所指出的,一对一的关系需要是双向的,而“拥有”一方需要一对多的关系。因此,您要做的是,将以下代码添加到您的项目实体中

/**
* @ORM\ManyToOne(targetEntity="Entity\Character", inversedBy="item")
*/
protected $character;
inversedBy属性创建双向关系。如果没有此语句,您将无法从角色实体加载getItems


如果更改了代码,则必须更新数据库并还原元素。在这之后,一切都会好起来。

你能给我们看一些代码吗?对不起。我更新了我的帖子。如果您需要一些特定的信息,请告诉我项目实体中的字符在哪里?我有一个字符对象,并将getItem作为项目对象。直到现在一切都很好。对item对象的每次调用都无效OneToMany关系是“new ArrayCollection();”在构造函数中?