Doctrine:映射适用于 Windows 但不适用于 Linux
Doctrine: Mapping working on Windows but not on Linux
我正在使用 Doctrine2 构建 Zend Framework 2 网站。我在 Windows 上开发,一切正常,但我已将我的代码上传到 Linux 环境,但出现了此错误:
The target-entity LeuerOneYear\Entity\UserLeagueRole cannot be found in 'User\Entity\User#leagueRoles'.
这些是我的实体:
<?php
namespace User\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use LeuerOneYear\Entity\UserLeagueRole;
use Doctrine\Common\Collections\ArrayCollection;
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity
*/
class User
{
/**
* @var integer
*
* @ORM\Column(name="UserId", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Login", type="string", length=15, nullable=false)
*/
private $login;
/**
* @var string
*
* @ORM\Column(name="password", type="string", length=45, nullable=false)
*/
private $password;
/**
* @var string
*
* @ORM\Column(name="Email", type="string", length=100, nullable=false)
*/
private $email;
/**
* @var \DateTime
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="CreatedOn", type="datetime", nullable=false)
*/
private $createdon;
/**
*
* @var string
*/
private $appRole;
/**
*
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="LeuerOneYear\Entity\UserLeagueRole", mappedBy="user", cascade={"persist"})
*/
private $leagueRoles;
和:
<?php
namespace LeuerOneYear\Entity;
use Doctrine\ORM\Mapping as ORM;
use User\Entity\User;
/**
* Userleaguerole
*
* @ORM\Table(name="userleaguerole", indexes={@ORM\Index(name="UserRole_League_idx", columns={"LeagueId"}), @ORM\Index(name="UserRole_Role_idx", columns={"RoleId"}), @ORM\Index(name="IDX_5D9987ED631A48FA", columns={"UserId"})})
* @ORM\Entity
*/
class UserLeagueRole
{
// /**
// * @var \User\Entity\User
// *
// * @ORM\Id
// * @ORM\GeneratedValue(strategy="NONE")
// * @ORM\OneToMany(targetEntity="User\Entity\User", mappedBy="leaguerole")
// * })
// */
/**
*
* @var User\Entity\User $user
*
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
* @ORM\ManyToOne(targetEntity="User\Entity\User", inversedBy="leagueRoles")
* @ORM\JoinColumn(name="UserId", referencedColumnName="UserId")
*/
private $user;
/**
* @var \LeuerOneYear\Entity\League
*
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
* @ORM\ManyToOne(targetEntity="LeuerOneYear\Entity\League", inversedBy="userRoles")
* @ORM\JoinColumn(name="LeagueId", referencedColumnName="LeagueId")
*
*/
private $league;
/**
* @var \LeuerOneYear\Entity\LeagueRole
*
* @ORM\ManyToOne(targetEntity="LeuerOneYear\Entity\LeagueRole")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="RoleId", referencedColumnName="RoleId")
* })
*/
private $role;
如您所见,User 和 UserLeagueRole 之间存在 ManyToOne 关系。
您知道为什么此映射在 Windows 上有效但在 Linux 上失败了吗?
我真是傻错误:
这是我的目录结构:
RootFolder/module/LeuerOneYear/src/leuerOneYear
然后在我的 module.config.php 中,我以这种方式配置我的学说驱动程序:
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
)
),
),
__NAMESPACE__
是 'LeuerOneYear',而不是 'leuerOneYear',因此 Linux 区分大小写,映射失败。
我刚刚将 module/src/leuerOneyear 重命名为 module/src/LeuerOneYear
我正在使用 Doctrine2 构建 Zend Framework 2 网站。我在 Windows 上开发,一切正常,但我已将我的代码上传到 Linux 环境,但出现了此错误:
The target-entity LeuerOneYear\Entity\UserLeagueRole cannot be found in 'User\Entity\User#leagueRoles'.
这些是我的实体:
<?php
namespace User\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use LeuerOneYear\Entity\UserLeagueRole;
use Doctrine\Common\Collections\ArrayCollection;
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity
*/
class User
{
/**
* @var integer
*
* @ORM\Column(name="UserId", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="Login", type="string", length=15, nullable=false)
*/
private $login;
/**
* @var string
*
* @ORM\Column(name="password", type="string", length=45, nullable=false)
*/
private $password;
/**
* @var string
*
* @ORM\Column(name="Email", type="string", length=100, nullable=false)
*/
private $email;
/**
* @var \DateTime
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="CreatedOn", type="datetime", nullable=false)
*/
private $createdon;
/**
*
* @var string
*/
private $appRole;
/**
*
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="LeuerOneYear\Entity\UserLeagueRole", mappedBy="user", cascade={"persist"})
*/
private $leagueRoles;
和:
<?php
namespace LeuerOneYear\Entity;
use Doctrine\ORM\Mapping as ORM;
use User\Entity\User;
/**
* Userleaguerole
*
* @ORM\Table(name="userleaguerole", indexes={@ORM\Index(name="UserRole_League_idx", columns={"LeagueId"}), @ORM\Index(name="UserRole_Role_idx", columns={"RoleId"}), @ORM\Index(name="IDX_5D9987ED631A48FA", columns={"UserId"})})
* @ORM\Entity
*/
class UserLeagueRole
{
// /**
// * @var \User\Entity\User
// *
// * @ORM\Id
// * @ORM\GeneratedValue(strategy="NONE")
// * @ORM\OneToMany(targetEntity="User\Entity\User", mappedBy="leaguerole")
// * })
// */
/**
*
* @var User\Entity\User $user
*
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
* @ORM\ManyToOne(targetEntity="User\Entity\User", inversedBy="leagueRoles")
* @ORM\JoinColumn(name="UserId", referencedColumnName="UserId")
*/
private $user;
/**
* @var \LeuerOneYear\Entity\League
*
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
* @ORM\ManyToOne(targetEntity="LeuerOneYear\Entity\League", inversedBy="userRoles")
* @ORM\JoinColumn(name="LeagueId", referencedColumnName="LeagueId")
*
*/
private $league;
/**
* @var \LeuerOneYear\Entity\LeagueRole
*
* @ORM\ManyToOne(targetEntity="LeuerOneYear\Entity\LeagueRole")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="RoleId", referencedColumnName="RoleId")
* })
*/
private $role;
如您所见,User 和 UserLeagueRole 之间存在 ManyToOne 关系。
您知道为什么此映射在 Windows 上有效但在 Linux 上失败了吗?
我真是傻错误:
这是我的目录结构:
RootFolder/module/LeuerOneYear/src/leuerOneYear
然后在我的 module.config.php 中,我以这种方式配置我的学说驱动程序:
'driver' => array(
__NAMESPACE__ . '_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
),
'orm_default' => array(
'drivers' => array(
__NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
)
),
),
__NAMESPACE__
是 'LeuerOneYear',而不是 'leuerOneYear',因此 Linux 区分大小写,映射失败。
我刚刚将 module/src/leuerOneyear 重命名为 module/src/LeuerOneYear