您好我使用composer来创建ZF2骨架应用程序。 安装了doctrine-module,doctrine-orm-module等作曲家文件如下:
{ "name": "zendframework/skeleton-application", "description": "Skeleton Application for ZF2", "license": "BSD-3-Clause", "keywords": [ "framework", "zf2" ], "homepage": "http://framework.zend.com/", "require": { "php": ">=5.3.3", "zendframework/zendframework": "2.2.*", "doctrine/doctrine-orm-module": "0.*", "doctrine/data-fixtures": "dev-master", "zendframework/zend-developer-tools": "dev-master", "doctrine/migrations": "dev-master", "bjyoungblood/bjy-profiler": "dev-master", "zendframework/zftool": "dev-master" } }
为模块添加了doctrine配置,如下所示:
'doctrine' => array( 'driver' => array( __NAMESPACE__.'_entities' => array( 'class' =>'Doctrine\ORM\Mapping\Driver\AnnotationDriver', //'cache' => 'array', 'paths' => array( __DIR__ . '/../src/'. __NAMESPACE__ .'/Entity', ) ), 'orm_default' => array( 'drivers' => array( __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_entities' ) ))),
我将我的实体添加到: 的模块/应用/ SRC /应用/实体/ user.php的
但是当我跑步时: php zf.php orm:info
我收到以下消息:
[异常]
您没有任何映射的Doctrine ORM实体 根据目前的配置。如果您有实体或 映射文件时,应检查映射配置是否有错误。
如果我尝试
php zf.php orm:schema-tool:create
我得到:
没有要处理的元数据类。
如何让Doctrine生成我的数据库?我做错了什么?
编辑: 以下是评论中要求的实体代码:
<?php namespace Application\Entity; use Doctrine\ORM\Mapping as ORM; /** @ORM\Entity */ class User { /** * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * @ORM\Column(type="integer") */ protected $id; /** @ORM\Column(type="string") */ protected $fullName; }
小更新,
我实际上是在虚拟机内运行它。从主机挂载文件所在的文件夹。如果我将文件复制到tmp文件夹,它可以正常工作。如果我在安装的文件夹中运行php zf.php orm:info我收到错误。 使用的虚拟化是Paralles 8,主机OS是OSX,guest是Debian 7。 我在/ media / psf / mount中工作。
答案 0 :(得分:2)
您的doctrine配置中的__NAMESPACE__
指令必定是个问题:您的配置可能不使用命名空间,因此__NAMESPACE__
将解析为主命名空间。
您可以尝试这样的配置:
'doctrine' => array(
'driver' => array(
'application_driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'cache' => 'array',
'paths' => array(
'module/Application/src/Application/Entity',
),
),
无需使用__DIR__
,您可以使用应用程序根目录,因为ZendApplication是chrooted(public/index.php
:chdir(dirname(__DIR__));
)。
最后,您还可以指定实体的表名和映射列的getter / setter:
<?php
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User {
/**
* @var int
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @var string
* @ORM\Column(type="string")
*/
protected $fullName;
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @param int $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return string
*/
public function getFullName()
{
return $this->fullName;
}
/**
* @param string $fullname
*/
public function setFullName($fullname)
{
$this->fullName= $fullname;
}
}
答案 1 :(得分:2)
问题在于过时的并行工具。 在做了一些调查之后,我发现有一个新版本的parallels工具可用。
手动更新工具,并重启虚拟机解决了问题。 即使使用原始代码也没有任何问题,并且在更新后一切正常。 我猜有一个相似的错误,但我没有在网上找到任何关于它的参考。
感谢您的帮助。