everyone.新年快乐!今天我在尝试解决此问题时遇到问题:
无法解析类"FacturadorVirtual\Modelos\Seguridad\Usuario"的列"id_usuario"的类型
对于某些人来说,此错误仅存在于 linux 环境中。在窗口中,没问题。问题到底出在哪里?看起来PlanAdquirido
没有通过关系$adquiridoPor
找到id_usuario
列。再次:此错误仅在 Linux 环境中触发。
乌苏阿里奥实体:
<?php
namespace FacturadorVirtualModelosSeguridad;
use IlluminateContractsAuthAuthenticatable;
/**
* @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 FacturadorVirtualModelosPlanes;
use DoctrineCommonCollectionsArrayCollection;
use FacturadorVirtualModelosSeguridadUsuario;
/**
* @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="FacturadorVirtualModelosSeguridadUsuario")
* @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 FacturadorVirtualModelosPlanesPlanAdquirido mapping is invalid:
* The referenced column name 'id_plan' has to be a primary key column on the target entity class 'FacturadorVirtualModelosPlanesPlanAdquirido'.
* The referenced column name 'id_usuario' has to be a primary key column on the target entity class 'FacturadorVirtualModelosSeguridadUsuario'.
从 FacturadorVirtual\Modelos\Planes\PlanAdquirido 到 FacturadorVirtual\Modelos\Seguridad\Usuario 的关系引用的列名
id_usuario
不存在。
我不知道我是否遗漏了什么,但是我有两天的时间试图弄清楚为什么在 linux(生产将驻留的地方)中不起作用。
- 表和列的名称都是小写的,使用 MySQL 5.7
今天我找到了答案。问题是 redi 的缓存。每次更新项目时,我都会运行清除缓存命令:
"vendor/bin/doctrine" orm:clear-cache:metadata
我以为这个命令已经清除了缓存,但它没有。要相应地清除缓存,只需运行:
$ redis-cli
> flushall
从那以后,现在一切都很好!