标签:php orm doctrine symfony-2-1
我试图在Symfony2.1项目中使用Doctrine2从表(通过实体)获取数据时遇到问题.这是我得到错误的控制器:
/**
* Country list
*/
public function countrylistAction()
{
$em = $this->getDoctrine()->getManager();
$countryList = $em->getRepository('ProjectBaseBundle:SYS_TCountry')
->findAll();
$serializer = new Serializer(array(new GetSetMethodNormalizer()),
array('json' => new JsonEncoder()));
return new Response($serializer->serialize($countryList, 'json'));
}
实体:
<?php
namespace Company\Project\BaseBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ORM\Table(name="SYS_TCountry")
*/
class SYS_TCountry
{
/**
* @ORM\Id
* @ORM\Column(type="string", length=3, nullable=false)
* @var string
*/
protected $idcountry;
/**
* @ORM\Column(type="string", length=75, nullable=false)
* @Assert\NotBlank()
* @var string
*/
protected $name;
....
public function getIdcountry() { return $this->idcountry; }
public function getName() { return $this->name; }
public function getA2() { return $this->a2; }
public function getA3() { return $this->a3; }
public function getIdstatus() { return $this->idstatus; }
public function setIdcountry($idcountry) { $this->idcountry = $idcountry; }
public function setName($name) { $this->name = $name; }
public function setA2($a2) { $this->a2 = $a2; }
public function setA3($a3) { $this->a3 = $a3; }
public function setIdstatus($idstatus) { $this->idstatus = $idstatus; }
public function __toString() { return $this->idcountry; }
}
Config.yml:
# Doctrine Configuration
doctrine:
dbal:
driver: %database_driver%
host: %database_host%
port: %database_port%
dbname: %database_name%
user: %database_user%
password: %database_password%
charset: UTF8
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
这是错误:
Warning: class_parents():
Class Company\Project\BaseBundle\Entity\SYS_TCountry does not exist and could not be loaded in
/var/www/project/src/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php line 40
这很奇怪,因为正如Doctrine在控制台中说的那样,映射已经正确完成了:我测试它执行php app / console doctrine:mapping:info:
[OK] Company\Project\BaseBundle\Entity\SYS_TCountry
如果我在控制台中执行查询一切顺利 – > app / console doctrine:query:sql’SELECT * FROM SYS_TCountry’,返回结果.
我不知道是否使用Symfony2.1我必须配置与2.0版本不同的东西,但似乎是相同的,因为映射是Doctrine的责任.
解决方法:
Symfony遵循PSR-0标准的文件名.除其他外,这意味着如果你在类名中使用下划线,它将在决定你的类应该存在的位置时用目录分隔符替换它,如下所示:
\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
所以,如果你有一个名为SYS_TCountry的类,它会期望找到它
Company/Project/BaseBundle/Entity/SYS/TCountry.php
代替
Company/Project/BaseBundle/Entity/SYS_TCountry.php
我认为您最好的解决方案是将文件名和类名更改为SYSTCountry.您无需更改表名称.
标签:php,orm,doctrine,symfony-2-1
来源: https://codeday.me/bug/20190530/1182297.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。