[英]Fetch records using doctrine codeigniter
我已經將ORM理論與Codeigniter集成在一起(都具有最新版本)
mysql表實體也由教義創建。
但是不具備使用學說實體從數據庫中獲取數據的知識。
我使用下面的結構來整合教義和代碼點火器
https://github.com/pedrozok/codeigniter-doctrine-bootstrap
我修改了如下的學說庫。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
use Doctrine\Common\ClassLoader,
Doctrine\ORM\Tools\Setup,
Doctrine\ORM\EntityManager,
Doctrine\ORM\Mapping\Driver\DatabaseDriver,
Doctrine\ORM\Tools\DisconnectedClassMetadataFactory,
Doctrine\ORM\Tools\EntityGenerator,
Doctrine\Common\Cache\ApcCache;
class Doctrine {
public $em;
public function __construct() {
require_once __DIR__ . '/Doctrine/ORM/Tools/Setup.php';
Setup::registerAutoloadDirectory(__DIR__);
if (!file_exists($file_path = APPPATH . 'config/' . ENVIRONMENT . '/database.php') && !file_exists($file_path = APPPATH . 'config/database.php')) {
throw new Exception('The configuration file database.php does not exist.');
}
require $file_path;
$connection_options = array(
'driver' => 'pdo_mysql',
'user' => $db['default']['username'],
'password' => $db['default']['password'],
'host' => $db['default']['hostname'],
'dbname' => $db['default']['database'],
'charset' => $db['default']['char_set'],
'driverOptions' => array(
'charset' => $db['default']['char_set'],
),
);
// With this configuration, your model files need to be in application/models/Entity
// e.g. Creating a new Entity\User loads the class from application/models/Entity/User.php
$models_namespace = 'Entity';
$models_path = APPPATH . 'models';
$proxies_dir = APPPATH . 'models/Proxies';
$metadata_paths = array(APPPATH . 'models');
$extension_dir = APPPATH . 'libraries/Doctrine';
// Set $dev_mode to TRUE to disable caching while you develop
$config = Setup::createAnnotationMetadataConfiguration($metadata_paths, $dev_mode = true, $proxies_dir);
// Proxy configuration
$config->setProxyDir(APPPATH . '/models/proxies');
$config->setProxyNamespace('Proxies');
$this->em = EntityManager::create($connection_options, $config);
/* code added to handle enum datatype starts here */
$platform = $this->em->getConnection()->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');
/* ends enum code */
$loader = new ClassLoader($models_namespace, $models_path);
$loader->register();
/**
* generate entities from database
* @return none
*/
// $this->generate_doctrine_entities($this->em, APPPATH . "models/Entity");
/* ends */
//$this->create_update_database($this->em, "update");
}
function generate_doctrine_entities($em, $path) {
$em->getConfiguration()->setMetadataDriverImpl(
new DatabaseDriver($this->em->getConnection()->getSchemaManager())
);
$cmf = new DisconnectedClassMetadataFactory();
$cmf->setEntityManager($em);
$metadata = $cmf->getAllMetadata();
$generator = new EntityGenerator();
$generator->setRegenerateEntityIfExists(false);
$generator->setUpdateEntityIfExists(true);
$generator->setGenerateStubMethods(true);
$generator->setGenerateAnnotations(true);
$generator->generate($metadata, $path);
}
function create_update_database($em, $mode = "update") {
$tool = new \Doctrine\ORM\Tools\SchemaTool($em);
$cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory();
$cmf->setEntityManager($em);
$metadata = $cmf->getAllMetadata();
if ($mode == "create") {
$queries = $tool->getCreateSchemaSql($metadata);
} else {
$queries = $tool->getUpdateSchemaSql($metadata);
}
echo "Total queries: " . count($queries) . "<br /><br />";
for ($i = 0; $i < count($queries); $i++) {
$em->getConnection()->prepare($queries[$i])->execute();
echo $queries[$i] . "<br /><br />Execution Successful: " . ($i + 1) . "<br /><br />";
}
}
}
有沒有建議將教義實體包含在codeigniter模型中並從實體獲取數據?
這是一些代碼示例,對您有幫助嗎?
// Fetch data by Native SQL
// $em is entity manager
$sql = "SELECT * FROM userView ";
// $em = $this->getDoctrine()->getManager();
$stmt = $em->getConnection()->prepare($sql);
$stmt->execute();
\Doctrine\Common\Util\Debug::dump( $stmt->fetchAll() );
//fetching data in by DQL
$qb = $em->getRepository('User')->createQueryBuilder('u');
//$qb->andWhere('u.id = :id')->setParameter('id', $id);
$data = $qb->getQuery()->getResult( ); // in objects
$data = $qb->getQuery()->getResult(Query::HYDRATE_ARRAY); // in array
echo '<pre>'; \Doctrine\Common\Util\Debug::dump($data);
// Fetching data by common way
$data = $em->getRepository('User');
$datax = $data->findAll();
foreach($datax as $d) {
echo '<pre>'; \Doctrine\Common\Util\Debug::dump($d);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.