我已经创建了两个现有数据库表的实体,这些表使用了表关系的学说约定,我需要关联表以使其能够工作,这些实体通过查询数据来工作,而不是在它们之间进行工作。
表名“ Articulos”
class Articulos
{
/**
* @ORM\Id()
* @ORM\Column(type="integer")
*/
private $ID_Articulo;
/**
* @ORM\Column(name="ID_Clasificacion_Articulo", type="integer")
* @ORM\ManyToOne(targetEntity="ClasificacionesArticulos")
*/
private $ID_Clasificacion_Articulo;
.......
Table name "ClasificacionesArticulos"
class ClasificacionesArticulos
{
/**
* @ORM\Column(name="ID_Clasificacion_Articulo", type="integer")
* @ORM\Id()
* @ORM\OneToMany(targetEntity="Articulos", mappedBy="ID_Clasificacion_Articulo")
*/
private $ID_Clasificacion_Articulo;
/**
* @ORM\Column(type="string", length=150)
*/
private $Codigo;
/**
* @ORM\Column(type="string", length=150)
*/
private $Nombre;
.........
当我咨询任何实体时,返回没有子关系的结果。我想这是因为字段id的名称未使用名称策略,但是我无法在数据库中更改它们,因此必须根据要求进行调整。
如果有人有一个主意,我非常感谢您
答案 0 :(得分:0)
这可以通过实现自定义的教义命名策略来完成。在Symfony实体中,使用camelCase可以避免命名问题。但是,如果您需要特定的表名,请遵循the guide
您必须实现NamingStrategy
类:
class CustomNamingStrategy implements NamingStrategy
{
}
通过在config / services.yaml末尾添加以下内容将其注册为服务:
app.naming_strategy.custom:
class: App\Service\CustomNamingStrategy
autowire: true
然后通过如下编辑config / packages / doctrine.yaml指定命名策略:
naming_strategy: app.naming_strategy.custom
我相信您正在寻找propertyToColumnName
方法,如Doctrine所说的
如果您具有数据库命名标准,则所有表名都应为 以应用程序前缀为前缀,所有列名都应小写 情况下,您可以通过实施命名轻松达到此类标准 策略。