我设置了Doctrine 1 b4,但现在看来,当我尝试Doctrine 2它失败时
我在D:\ResourceLibrary\Frameworks\Doctrine
D:\ResourceLibrary\Frameworks\Doctrine\bin
D:\ResourceLibrary\Frameworks\Doctrine\Doctrine
D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\Common
D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\DBAL
D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\ORM
我将D:\ResourceLibrary\Frameworks\Doctrine\bin
放入PATH
Windows环境变量中
并将D:\ResourceLibrary\Frameworks\Doctrine
添加到php.ini include_path
我发现当我尝试做
时D:\>php doctrine.php
Could not open input file: doctrine.php
失败了...我认为,因为我在D:\ResourceLibrary\Frameworks\Doctrine\bin
Windows环境变量中有PATH
,它可以找到doctrine.php
吗?
D:\ResourceLibrary\Frameworks\Doctrine\bin>php doctrine.php
Warning: require(D:\ResourceLibrary\Frameworks\Doctrine\bin/../lib/vendor\Symfony\Components\Console\Helper\HelperSet.ph
p): failed to open stream: No such file or directory in D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\Common\ClassLoad
er.php on line 143
Fatal error: require(): Failed opening required 'D:\ResourceLibrary\Frameworks\Doctrine\bin/../lib/vendor\Symfony\Compon
ents\Console\Helper\HelperSet.php' (include_path='D:\ResourceLibrary\Frameworks\ZendFramework\library;D:\ResourceLibrary
\Frameworks\Doctrine;.;c:\php\includes') in D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\Common\ClassLoader.php on li
ne 143
然后第二次尝试,传递错误......
答案 0 :(得分:6)
昨晚花了几个小时在我的机器上配置Doctrine 2后,我终于成功地使用了Doctrine 2。
我以这种方式配置了Doctrine 2。
虽然我更喜欢从软件包管理器下载,但有几种方法可以安装Doctrine 2。
首先我从http://www.doctrine-project.org/projects/orm/download下载了包DoctrineORM-2.0.0BETA3.tgz
我在我的测试文件夹中提取了tar文件,在那里我测试了我的示例代码。我的文件夹看起来像
./test
DoctrineORM/
DoctrineORM/bin
DoctrineORM/bin/Doctrine
然后我在root'model'和'proxies'上创建了2个文件夹。
现在我们需要引导Doctrine。
--- Bootsrap ---
<?php
// test.php
require 'DoctrineORM/Doctrine/Common/ClassLoader.php';
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', 'DoctrineORM');
$classLoader->register(); // register on SPL autoload stack
$classloader = new \Doctrine\Common\ClassLoader('model', __DIR__);
$classloader->register();
$config = new \Doctrine\ORM\Configuration();
$cache = new \Doctrine\Common\Cache\ArrayCache();
$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);
$driverImpl = $config->newDefaultAnnotationDriver('model');
$config->setMetadataDriverImpl($driverImpl);
$config->setProxyDir('proxies');
$config->setProxyNamespace('proxies');
$config->setAutoGenerateProxyClasses(true);
$config->getAutoGenerateProxyClasses();
$connectionOptions = array(
'driver' => 'pdo_mysql',
'dbname' => 'test',
'user' => '[DB_User]',
'password' => '[DB_Pass]'
);
$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);
//echo 'Hello World!' . PHP_EOL;
// Get result from Table
$q = $em->createQuery('SELECT c FROM model\User c ORDER BY c.name');
$t = $q->getResult();
echo "<pre>"; print_r($t);
// Save a new User to DB
$uu = new model\User();
$uu->name = 'test name1';
$uu->age = 4;
$em->persist($uu);
$em->flush();
--- Bootsrap ---
然后我在模型目录
中创建了一个模型文件--- Model - User.php ---
<?php
// Model File model/User.php
namespace Model;
/** @Entity @Table(name="users") */
class User
{
/**
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
public $id;
/** @Column(type="string", length=50) */
public $name;
/** @Column(type="integer", length=50) */
public $age;
}
--- Model - User.php ---
我的完整文件夹结构现在如下所示。
./test
DoctrineORM/
DoctrineORM/bin
DoctrineORM/bin/Doctrine
Model/
Model/User.php
test.php
希望这会对你有所帮助。如果您需要任何进一步的帮助,我可以向您发送在我的机器上工作正常的完整资源。
答案 1 :(得分:3)
您不需要整个Symfony框架。只是Doctrine所依赖的那些东西。
如果您下载ORM组件的current version(目前正在BETA2),它将包含一个名为Symfony
的文件夹(可能在lib/vendor/Symfony
中,但它往往会移动新版本)。您需要确保doctrine.php
或cli-config.php
中的ClassLoader可以找到Symfony文件夹。
$classLoader = new \Doctrine\Common\ClassLoader('Symfony', __DIR__ . '/path/to/Symfony');
$classLoader->register();
我希望这些信息准确无误。 Doctrine团队一直在弄乱发布的结构,他们越接近最终版本。
答案 2 :(得分:0)
如果要在新的Doctrine 2测试版中使用命令行界面,还必须安装Symfony 2框架(因为它包含Console Helper)并将其放入包含路径中。
据我所知,目前没有可用的PEAR安装,因此您必须从Symfony 2 website或通过Git下载源代码。
旁注:您似乎也尝试在不存在的路径上执行doctrine.php。这就是你得到
的原因无法打开输入文件:doctrine.php
错误消息。
答案 3 :(得分:0)
Doctrine v2。*存储在bin目录中。
试试这样:
$ vendor/bin/doctrine orm:conver-mapping xml src/ --from-database --force
不要让PHP开始。