Табличные отношения Symfony 4 не работают вне стратегии именования? - PullRequest
0 голосов
/ 21 января 2019

Я создал две сущности существующих таблиц базы данных, в этих таблицах используются соглашения доктрины для отношений между таблицами, мне нужно связать таблицы, чтобы они могли работать, сущности работают, обращаясь к данным, но не между ними.

Название таблицы "Артикулос"

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 голосов
/ 22 января 2019

Это может быть достигнуто путем реализации собственной стратегии именования Doctrine. В сущности Symfony используйте camelCase, чтобы избежать проблем с именованием. Но, если вам нужны конкретные имена таблиц, следуйте руководству

Вы должны реализовать 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 метод, как говорит Доктрина

Если у вас есть стандарты именования баз данных, как и все имена таблиц, с префиксом приложения, все имена столбцов должны быть ниже В этом случае вы можете легко достичь таких стандартов, внедрив стратегия.

...