我正在关注Symfony教程并手动为我的产品实体创建一个存储库,而不是使用控制台来创建它。最初注释看起来像这样:
/**
* Product
*
* @ORM\Table(name="product")
* @ORM\Entity(repositoryClass="AppBundle\Entity\ProductRepository")
*/
但是当我学习使用控制台创建实体和存储库时,我尝试更改它以使其位于正确的位置。控制台将所有控制台创建的控制台放在Repository目录中。我的产品实体现在看起来像这样(手动更改):
/**
* Product
*
* @ORM\Table(name="product")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ProductRepository")
*/
但是当我发出这个命令时
# php bin/console doctrine:generate:entities AppBundle
OR
# php bin/console doctrine:generate:entities AppBundle/Entity/Product
存储库最终在Entity目录中,而不是存储库目录。我已经查找了这个问题,看起来像是Doctrine缓存,但我已经尝试了以下命令来清除它而没有运气:
php bin/console doctrine:cache:clear-metadata
php bin/console doctrine:cache:clear-query
php bin/console doctrine:cache:clear-result
我甚至尝试通过控制台重新创建实体,但它继续在错误的位置创建文件。有时它会将它放在正确的位置以便刷新一次浏览器但是却抱怨它无法找到它(因为它在Entity目录中查找它。
有人帮我理顺学说吗?这是我的课程,所以你可以完全看到:
<?php
namespace AppBundle\Entity; //<--- This is one of the issues. See answer
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Product
*
* @ORM\Table(name="product")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ProductRepository")
*/
class Product
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
...
答案 0 :(得分:0)
如果有人尝试过,但没有对此发表评论,感谢任何花时间看这个的人。
答案是我的愚蠢。我以root身份而不是Web用户登录时创建了项目,因此无法覆盖缓存的元数据文件。我通过运行以下命令找到了这个:
# php bin/console cache:clear
得到了......
[InvalidArgumentException]
The directory "/path/to/testapp/var/cache/dev/annotations" is not writable.
(上面的路径修改为掩盖实际路径)。其次,我班级名称空间的名称显然是错误的。应该是:
namespace AppBundle\Repository;
无论如何,谢谢。