Указанное имя столбца должно быть столбцом первичного ключа в целевом классе сущности.

0

каждый. С новым годом! Сегодня у меня возникают проблемы с решением этой проблемы:

Не удалось разрешить тип столбца "id_usuario" класса "FacturadorVirtual\Modelos\Seguridad\Usuario"

Для некоторых эта ошибка присутствует только в среде linux. В окнах нет проблем. В чем проблема? Похоже, PlanAdquirido не находит столбец id_usuario через отношение $adquiridoPor. Опять же: эта ошибка запускается только в среде linux.

Объект Usuario:

<?php

namespace FacturadorVirtual\Modelos\Seguridad;

use Illuminate\Contracts\Auth\Authenticatable;

/**
 * @entity
 * @table(name="usuarios")
 */
class Usuario implements Authenticatable
{
    /**
     * @id
     * @var integer
     * @column(type="integer", name="id_usuario")
     * @generatedValue(strategy="AUTO")
     */
    protected $id;
}

Объект PlanAdquirido:

<?php

namespace FacturadorVirtual\Modelos\Planes;

use Doctrine\Common\Collections\ArrayCollection;
use FacturadorVirtual\Modelos\Seguridad\Usuario;

/**
 * @entity
 * @table(name="planes_adquiridos")
 */
class PlanAdquirido
{
    /**
     * @id
     * @var integer
     * @column(type="integer", name="id_plan")
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var Usuario
     * @ManyToOne(targetEntity="FacturadorVirtual\Modelos\Seguridad\Usuario")
     * @JoinColumn(name="adquirido_por", referencedColumnName="id_usuario")
     */
    protected $adquiridoPor;

}

Если я запускаю "vendor/bin/doctrine.bat" orm:validate-schema в окнах, я получаю:

Mapping
-------
[OK] The mapping files are correct.

Но в Linux я получаю:

Mapping
-------
 [FAIL] The entity-class FacturadorVirtual\Modelos\Planes\PlanAdquirido mapping is invalid:
 * The referenced column name 'id_plan' has to be a primary key column on the target entity class 'FacturadorVirtual\Modelos\Planes\PlanAdquirido'.
 * The referenced column name 'id_usuario' has to be a primary key column on the target entity class 'FacturadorVirtual\Modelos\Seguridad\Usuario'.

Имя столбца id_usuario для ссылки из FacturadorVirtual\Modelos\Planes\PlanAdquirido в направлении FacturadorVirtual\Modelos\Seguridad\Usuario не существует.

Я не знаю, пропал ли я что-то, но у меня есть два дня, пытаясь понять, почему не работает в Linux (где будет работать продукция).

  • Таблицы и имя столбца находятся в нижнем регистре, используя MySQL 5.7
Теги:
doctrine
doctrine2

1 ответ

0
Лучший ответ

Сегодня я нашел ответ. Проблема заключалась в повторном кэшировании. Каждый раз, когда проект обновлялся, я запускал команду clear cache:

"vendor/bin/doctrine" orm:clear-cache:metadata

Я думал, что эта команда уже очистила кеш, но этого не произошло. Чтобы очистить кеш, достаточно выполнить:

$ redis-cli
> flushall

С тех пор все отлично работает!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню