引用的列名必须是目标实体类上的主键列



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

从那以后,现在一切都很好!

相关内容

  • 没有找到相关文章

最新更新