2015-06-19 23 views
10

Basit bir sorgu yaptığımda, tüm kullanıcıları bulmak gibi boş bir dizi döndürür. $users = $em->getRepository('MyApp\\Model\\Entity\\User')->findAll();Doküman, Google App Engine'de veri bulamıyor mu?

Ancak, veritabanına el ile bağlandığımda PDO kullanarak verileri bulur. Bir dosya sistemine sahip olmayan GAE ile hiçbir ilgisi olmadığından emin olmak için ArrayCache yöntemini kullanıyorum. GAE dokümanları sys_get_temp_dir()'u kullanabileceğinizi söylüyor, bu yüzden benim proxy'm olduğunu sanmıyorum. Doktrinin neden hiçbir şey döndürmediği ve herhangi bir hata atmadığı için kaybettim.

<?php 

$baseDir = dirname(dirname(__FILE__)); 

define('TIMEZONE_OFFSET', \MyApp\Library\Date::getMyTimezoneOffset()); 

use Doctrine\Common\Annotations\AnnotationReader; 
use Doctrine\Common\Annotations\AnnotationRegistry; 

// globally used cache driver, in production use APC or memcached 
$cache = new Doctrine\Common\Cache\ArrayCache; 
// standard annotation reader 
$annotationReader = new AnnotationReader; 
AnnotationReader::addGlobalIgnoredName('dummy'); 
AnnotationRegistry::registerFile(__DIR__ . "/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php"); 
AnnotationRegistry::registerFile(__DIR__ . "/Gedmo/Timestampable/Mapping/Driver/Annotation.php"); 
AnnotationRegistry::registerAutoloadNamespace("\\MyApp\\Model\\Entity", $baseDir); 
$cachedAnnotationReader = new Doctrine\Common\Annotations\CachedReader(
    $annotationReader, // use reader 
    $cache, // and a cache driver 
    $debug = LOCAL 
); 
// create a driver chain for metadata reading 
$driverChain = new Doctrine\ORM\Mapping\Driver\DriverChain(); 
// load superclass metadata mapping only, into driver chain 
// also registers Gedmo annotations.NOTE: you can personalize it 
Gedmo\DoctrineExtensions::registerAbstractMappingIntoDriverChainORM(
    $driverChain, // our metadata driver chain, to hook into 
    $cachedAnnotationReader // our cached annotation reader 
); 

// now we want to register our application entities, 
// for that we need another metadata driver used for Entity namespace 
$annotationDriver = new Doctrine\ORM\Mapping\Driver\AnnotationDriver(
    $cachedAnnotationReader, // our cached annotation reader 
    array(ENTITY_PATH) // paths to look in 
); 
// NOTE: driver for application Entity can be different, Yaml, Xml or whatever 
// register annotation driver for our application Entity namespace 
$driverChain->addDriver($annotationDriver, 'MyApp\\Model\\Entity'); 

// general ORM configuration 
$config = new Doctrine\ORM\Configuration; 
$config->setProxyDir(sys_get_temp_dir()); 
$config->setProxyNamespace('Proxy'); 
$config->setAutoGenerateProxyClasses(Doctrine\Common\Proxy\AbstractProxyFactory::AUTOGENERATE_FILE_NOT_EXISTS); // this can be based on production config. 
// register metadata driver 
$config->setMetadataDriverImpl($driverChain); 
// use our already initialized cache driver 
$config->setMetadataCacheImpl($cache); 
$config->setQueryCacheImpl($cache); 

// create event manager and hook preferred extension listeners 
$evm = new Doctrine\Common\EventManager(); 
// gedmo extension listeners, remove which are not used 

// timestampable 
$timestampableListener = new Gedmo\Timestampable\TimestampableListener; 
$timestampableListener->setAnnotationReader($cachedAnnotationReader); 
$evm->addEventSubscriber($timestampableListener); 

// mysql set names UTF-8 if required 
$evm->addEventSubscriber(new Doctrine\DBAL\Event\Listeners\MysqlSessionInit()); 

$dbParams = array(
    'driver' => 'pdo_mysql', 
    'user' => DB_USER, 
    'password' => DB_PASSWORD, 
    'dbname' => DB_NAME, 
    'host' => DB_HOST, 
    'port' => DB_PORT, 
    'unix_socket' => DB_UNIX_SOCKET 
); 

// Finally, create entity manager 
$em = Doctrine\ORM\EntityManager::create($dbParams, $config, $evm); 

Güncelleme Sadece netlik için

:

Bu boş bir dizi döndürür: Burada

uygulamam için benim önyükleme dosyası

$users = $em->getRepository('MyApp\\Model\\Entity\\User')->findAll(); 
\Doctrine\Common\Util\Debug::dump($users); 

Ve bu bir döner içindeki kullanıcılar ile dizi. Çok karıştı. Doktrin INNER böylece hiçbir kullanıcıları JOIN ve kullanılmış, böylece

$pdo = $em->getConnection(); 
$users = $pdo->query('SELECT * FROM user'); 
var_dump($users->fetchAll()); 
+0

* * "herhangi bir hata atma değil" - dosyanızın (ler) üstüne hata bildirimi ekle sağ < 'örneğin açılış PHP etiketinin sonra? php error_reporting (E_ALL); ini_set ('display_errors', 1); 'daha sonra kodunuzun geri kalanını, herhangi bir şey sağlayıp sağlamadığını görmek için. Henüz yapmadıysanız, PDO'nuzdaki hataları da kontrol edin http://php.net/manual/en/pdo.error-handling.php. –

+0

@ Fred-ii- Söylediğim gibi yaptım, hala hata yok. =/ – GreeKatrina

+0

muhtemelen 'findAll()' işlevinin ne yaptığını yayınlamanız gerekir. Bu bir PDO çekirdek işlevi değil. kılavuza bakın http://php.net/manual/en/pdostatement.fetch.php –

cevap