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

时间:2018-01-02 17:19:00

标签: php mysql linux doctrine-orm doctrine

大家。新年快乐!今天我在解决这个问题时遇到了问题:

  

无法解析类“FacturadorVirtual \ Modelos \ Seguridad \ Usuario”的列“id_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;

}

如果我在Windows中运行"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'.
  

从FacturadorVirtual \ Modelos \ Planes \ PlanAdquirido到FacturadorVirtual \ Modelos \ Seguridad \ Usuario的关系引用的列名id_usuario不存在。

我不知道我是否遗漏了一些东西,但是我有两天时间试图找出为什么不能在linux中工作(生产将在那里工作)。

  • 表和列的名称均为小写,使用MySQL 5.7

1 个答案:

答案 0 :(得分:0)

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

body{
  overflow:hidden;
  margin:0;
}
#blue{
  background-color:blue;
  width:100vw;
  height:100vh;
}
#red{
  background-color:red;
  width:100vw;
  height:100vh;
}
#green{
  background-color:green;
  width:100vw;
  height:100vh;
}

我认为这个命令已经清除了缓存,但事实并非如此。要正确清除缓存,只需运行:

$(document).ready(function(){
  $(document).scroll(function(){
    $('body').animate({'scrollTop':'1000'},3000);
  });
});

从那时起,一切都很棒!