簡體   English   中英

使用教義代碼點火器獲取記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM