каждый. С новым годом! Сегодня у меня возникают проблемы с решением этой проблемы:
Не удалось разрешить тип столбца "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 (где будет работать продукция).
Сегодня я нашел ответ. Проблема заключалась в повторном кэшировании. Каждый раз, когда проект обновлялся, я запускал команду clear cache:
"vendor/bin/doctrine" orm:clear-cache:metadata
Я думал, что эта команда уже очистила кеш, но этого не произошло. Чтобы очистить кеш, достаточно выполнить:
$ redis-cli
> flushall
С тех пор все отлично работает!