Symfony 4表关系不符合命名策略吗?

时间:2019-01-21 19:37:54

标签: php symfony doctrine-orm foreign-keys relationship

我已经创建了两个现有数据库表的实体,这些表使用了表关系的学说约定,我需要关联表以使其能够工作,这些实体通过查询数据来工作,而不是在它们之间进行工作。

表名“ 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的名称未使用名称策略,但是我无法在数据库中更改它们,因此必须根据要求进行调整。

如果有人有一个主意,我非常感谢您

1 个答案:

答案 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所说的

  

如果您具有数据库命名标准,则所有表名都应为   以应用程序前缀为前缀,所有列名都应小写   情况下,您可以通过实施命名轻松达到此类标准   策略。