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

zlhcx6iw  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(357)

所有人。新年快乐!今天我在解决这个问题时遇到了问题:
无法解析类“facturadorvirtual\modelos\seguridad\usuario”的列“id\u usuario”的类型
对于某些人来说,这个错误只存在于linux环境中。在windows中,没问题。到底是什么问题?看起来像 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 在windows中,我得到:

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(生产将驻留在linux中)中工作。
表和列名都是小写的,使用mysql 5.7

watbbzwu

watbbzwu1#

今天我找到了答案。问题是redi的缓存。每次更新项目时,我都运行clear cache命令:

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

我以为这个命令已经清除了缓存,但它没有。要正确清除缓存,只需运行:

$ redis-cli
> flushall

从那时起一切都很好!

相关问题