Doctrine2 安裝教學

**本文假設php.exe已經安裝完成,並新增到windows的環境變數中。

  1. 首先下載及安裝 Composer-Setup.exe, 這個程式將會幫忙我們下載各類型的程式庫,包括我們即將使用的doctrine.
    網址為: http://getcomposer.org/doc/00-intro.md
  2. 安裝後,我們建立新專案的資料夾,例如new_project,然後在新專案的root目錄裏(即根目錄),新增檔案composer.json,然後於檔案中輸入以下json code:
    {
        "require": {
            "doctrine/orm": "2.*",
            "symfony/yaml": "2.*"
        },
        "autoload": {
            "psr-0": {"": "src/"}
        }
    }

    這個檔案是告訴Composer我們即將安裝什麼程式庫到我們的新專案。
  3. 然後我們打開command mode,前往我們專案的root目錄,並輸入以下指令:
    composer install

    如無意外,你將會看到正在下載的畫面,等待片刻程式庫將會自動安裝到我們的專案目錄裏。
  4. 另外,我們需要為doctrine準備以下的資料夾,架構如下:
    new_project
    |-- composer.json
    |-- config
    |   |-- xml
    |   `-- yaml
    `-- src
  5. 然後,讓我們於root目錄中新增一個檔案名為bootstrap.php,並加入以下代碼:
    <?php
    // bootstrap.php
    use Doctrine\ORM\Tools\Setup;
    use Doctrine\ORM\EntityManager;

    require_once "vendor/autoload.php";

    // Create a simple "default" Doctrine ORM configuration for Annotations
    $isDevMode = true;
    //$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/entities"), $isDevMode);
    // or if you prefer yaml or XML
    //$config = Setup::createXMLMetadataConfiguration(array(__DIR__."/config/xml"), $isDevMode);
    $config = Setup::createYAMLMetadataConfiguration(array(__DIR__."/config/yaml"), $isDevMode);

    // database configuration parameters
    //$conn = array(
    //    'driver' => 'pdo_sqlite',
    //    'path' => __DIR__ . '/db.sqlite',
    //);

    $conn = array(
        'driver'   => 'pdo_mysql',
        'host'     => '127.0.0.1',
        'dbname'   => 'test',
        'user'     => 'root',
        'password' => ''
    );

    // obtaining the entity manager
    $entityManager = EntityManager::create($conn, $config);


    使用什麼資料格式進行orm請自行決定,以上我使用了yaml.
  6. 於root目錄中再新增一個檔案名為cli-config.php,並加入以下代碼:
    <?php
    // cli-config.php
    require_once "bootstrap.php";

    $helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
        'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($entityManager)
    ));
  7. 初步設定已經完成,接下來讓我們建立資料表架構,我們使用yaml建立一個資料表架構,代碼如下:
    # config/yaml/Product.dcm.yml
    Product:
      type: entity
      table: products
      id:
        id:
          type: integer
          generator:
            strategy: AUTO
      fields:
        name:
          type: string
  8. 然後我們再使用以下指令,讓doctrine為我們建立mapper class:
    vendor\bin\doctrine orm:generate-entities config/yaml

    建立完成後,請將建立的mapper class於config/yaml中移到 root/src.
  9. 再來讓我們在資料庫中建立資料表:
    vendor\bin\doctrine orm:schema-tool:create
  10. 現在就可以使用doctrine來操作資料表了,以下為簡單例子:
    <?php
    // create_product.php
    require_once "bootstrap.php";

    $newProductName = $argv[1];

    $product = new Product();
    $product->setName($newProductName);

    $entityManager->persist($product);
    $entityManager->flush();

    echo "Created Product with ID " . $product->getId() . "\n";


    **執行指令測試輸入資料到資料表:
    php create_product.php ORM

    <?php
    // list_products.php
    $productRepository = $entityManager->getRepository('Product');
    $products = $productRepository->findAll();

    foreach ($products as $product) {
        echo sprintf("-%s\n", $product->getName());
    }


    <?php
    // show_product.php
    $id = $argv[1];
    $product = $entityManager->find('Product', $id);

    echo sprintf("-%s\n", $product->getName());
  11. 以下指令可以依現時的mapper class格式轉換成為xml格式
    vendor\bin\doctrine orm:convert-mapping xml /path/to/mapping-path-converted-to-xml


    doctrine2 已經安裝完成,以後可以輕鬆地透過orm操作資料庫了。

沒有留言: