[ alfa-pro @ 04.07.2013. 12:00 ] @
Krenuo sam da ucim Doctrine 2 i sve sam uradio kako je u dokumentaciji. Istalirao sam ga putem composer-a.
http://docs.doctrine-project.o...tutorials/getting-started.html

Kada pokrenem iz terminala :

Citat:
$ php vendor/bin/doctrine orm:schema-tool:create


Dobijem => No Metadata Classes to process.

A sve kako su oni objasnili i postavili sam uradio...


Bootstrap.php


Code:

<?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__."/src"), $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',
);

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



Code:


<?php
// cli-config.php
require_once "bootstrap.php";

$em = $entityManager;

$helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
));

[ Nikola Poša @ 04.07.2013. 20:42 ] @
Imao sam identičan problem skoro, doduše Doctrine sam koristio u nekoj integraciji sa Zend Framework 2.

Mislim da je u tvom slučaju problem ta putanja. Jesi siguran da ti se entiteti nalaze baš na __DIR__."/src", a ne na npr. __DIR__."/src/App/Model/Entities" putanji?
[ alfa-pro @ 05.07.2013. 06:55 ] @
Da siguran sam jer sam na pocetku ja mislio da je putanja entiteta pogresna. Testirao sam i dobijam /var/www/doctrineUnitT/src. Probao sam da menjam ali nista.
U medju vremenu sam postvio post na stackoverflow. Gde mi je decko rekao da umesto:
$ php vendor/bin/doctrine orm:schema-tool:create
Stavim :
php vendor/bin/doctrine-module orm:schema-tool:create

Posle ovoga se pojavljuje druga greska sa sadrzajem :

Citat:

Could not open input file: vendor/bin/doctrine-module


Sada ovi na stackoverflow tipuju da je greska u composer-u. Rekli su da reinstaliram composer i ponovo ceo Vendor da preuzmem i da composer.lock preimenujem u composer.lock.bak.

Kad se vratim sa posla uradicu to pa cu javim sta sam uradio i da li to uopste radi....

Meni je struktura za src sledeca:

/root
/src
/xml
/yaml
[ Nikola Poša @ 05.07.2013. 09:20 ] @
Ne, ne verujem da je problem do composer-a, a kamoli to da treba da pozivaš doctrine-module umesto doctrine, jer taj fajl i ne postoji koliko znam. Kažem, najverovatnije je nešto do tih putanja, jer doctrine ne uspeva da locira entitete. I dalje sam pri stavu da tamo treba da ide putanja do foldera u kojem se nalaze same Entities klase, jer i ako pogledaš ovaj primer: https://github.com/doctrine/do...er/tools/sandbox/bootstrap.php, dakle na zvaničnom doctrine2 git repo-u, videćeš da tu stoji:
Code:
// Set up Metadata Drivers
$driverImpl = $config->newDefaultAnnotationDriver(array(__DIR__ . "/Entities"));
$config->setMetadataDriverImpl($driverImpl);

A sadržaj tog Entities foldera izgleda ovako: https://github.com/doctrine/do.../master/tools/sandbox/Entities. Dakle ta putanja mora biti baš do samih klasa.

Mada ti ako si pratio striktno dokumentaciju, tebi se Entities klase nalaze striktno u src folderu, dakle ne po nekim subfolderima, tako da je onda ta putanja u tvom bootstrap.php ok.
[ Nikola Poša @ 05.07.2013. 09:37 ] @
btw I jedno glupo pitanje, jel imaš uopšte neki entitet u src folderu? Pošto gledam tu dokumentaciju, tu je čini mi se malo pogrešan redosled, jer tu je kreiranje db šeme opisano pre kreiranja samih entiteta. A u slučaju annotation driver-a, koji parsira anotiacije u nekoj entity klasi i koji se u tom primeru po default-u koristi (Setup::createAnnotationMetadataConfiguration), ako nema entiteta, onda on nema šta ni da parsira, pa neće ni biti tih meta podataka.
[ alfa-pro @ 05.07.2013. 14:42 ] @
Da i meni je to zapalo za oko ali reko ajde otkud znam mozda tako treba, znam kad sam radio doctrine 1.3 mislim davno doc je bila perfektna.

Radio sam iz primera Products koja je na njihovoj doc i radio sam svoju Post class

Code:


<?php
// src/Product.php

 namespace Post;

class Post
{

    protected $id;
    protected $cat_id;
    protected $page_id;
    protected $title;
    protected $short_desc;
    protected $long_desc;
    protected $date_publish;
    protected $date_unpublish;
    protected $date_modify;
    protected $author;
    
    
    public function getId() {
        return $this->id;
    }
    public function getTitle(){
        return $this->title;
    }
    public function setTitle($name){
        $this->title = $name;
    }
    public function getShortDsc() {
        $this->short_desc;
    }
    public function setShortDesc($dsc){
        $this->short_desc = $dsc;
    }

    // ECT method

}

[ Nikola Poša @ 05.07.2013. 15:38 ] @
A gde su ti anotacije? Npr.:
Code:
/**
 * @ORM\Entity
 * @ORM\Table(name="posts")
 */
class Post
    /**
     * @ORM\Id
     * @ORM\Column(name="id", type="integer", options={"unsigned"=true});
     * @ORM\GeneratedValue(strategy="AUTO")
     * 
     * @var int 
     */
    private $id;

    /**
     * @ORM\Column(type="string")
     * 
     * @var string 
     */
    protected $title;

    //etc.
}
[ 357_97 @ 05.07.2013. 16:11 ] @
Ja sam baš prošle nedelje gledao Doctrine i mogu reći da je bilo povuci potegni da proradi tutorial sa njihovog site-a. Meni su pomogli sledeći linkovi:
Link #1
Link #2

Takodje sam napravio sebi mali podsetnik za komande i njihov redosled. Lepa stvar kod PhpStorm-a je što se može napraviti autocomplete (običan XML file) za command line tool!
Code:
vendor\bin\doctrine orm:convert-mapping xml ./orm_test --from-database --force
vendor\bin\doctrine orm:generate-entities   ./orm_test --generate-annotations=1 --regenerate-entities=1
vendor\bin\doctrine orm:validate-schema
vendor\bin\doctrine orm:schema-tool:update --dump-sql
vendor\bin\doctrine orm:validate-schema

cli-config.php sam malo izmenio
Code (php):
require_once "bootstrap.php";

# From Doctrine official tutorial !!!
//return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($entityManager);

# Blog - @see http://shadyacres.tumblr.com/p...855756/doctrine-setup-tutorial
$helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
                    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($entityManager)
));
 

a bootstratp.php izgleda
Code (php):

<?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;
$path  = array(__DIR__.'/orm_test');
$setup = Setup::createXMLMetadataConfiguration($path, $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
$dbParams = array(
     'driver'   => 'pdo_mysql',
     'user'     => 'db_username',
     'password' => 'db_password',
     'dbname'   => 'orm_test',
);

// Obtaining the entity manager
$entityManager = EntityManager::create($dbParams, $setup);

/** @var $entityManager \Doctrine\ORM\EntityManager */
$platform = $entityManager->getConnection()->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');

# Ovde treba dodati require_once nakon kreiranja enntiteta!!!

[ alfa-pro @ 05.07.2013. 17:47 ] @
Cek a ja moram da imam anotaciju da bi to proradilo ?

Ali pazi ja kada kopiram ondaj Product class sa njihovog sajta i dalje isto, eo 50x sam proveravao dir src i putanju. Nema sta to je ta.


Gde je njima anotacija ?

Code:

<?php
// src/Product.php
 namespace Product;
class Product
{
    /**
     * @var int
     */
    protected $id;
    /**
     * @var string
     */
    protected $name;

    public function getId()
    {
        return $this->id;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setName($name)
    {
        $this->name = $name;
    }
}
[ Nikola Poša @ 05.07.2013. 20:15 ] @
Pa na osnovu čega očekuješ da ti on izgeneriše bazu kad pokreneš tu komandu iz konzole? Čitaj šta kaže dalje, ispod tog snippet-a:
Citat:
The next step for persistence with Doctrine is to describe the structure of the Product entity to Doctrine using a metadata language. The metadata language describes how entities, their properties and references should be persisted and what constraints should be applied to them.

Naravno da moraš unapred da imaš anotacije, na tebi je samo da izabereš gde ćeš ih držati, s obzirom da Doctrine na raspolaganje stavlja različite strategije u te svrhe: Docblock Annotations | XML | YAML | PHP.
[ alfa-pro @ 06.07.2013. 10:54 ] @
Cek, cek anotacija radi tako sto je ja deklarisem u klasi kao komentar ?

Jel to ovako ide


Code:

class User {

  /**
   * @Column(type=int, lenght = 11)
   */
    
    protected $id;

}



@357_97
Hvala covek uspeo sam ovo uputstvo je fantasticno. Hvala jos jenom. Ovi u doc su izokretali samo tako, zbunise narod.



Sad doctrine cita liniju anotacije @Column(type=int, lenght = 11) i pravi novu kolonu u bazi ID sa tipom integer i duzinom od 11 ?

=======================

Dopuna :

Jos jedna primedba na dokumentaciju. U njihovom primeru cli-config.php

Code:

<?php
// cli-config.php
require_once "bootstrap.php";

return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($entityManager);



Ovaj deo koji je postavljen na sajtu prijavljuje gresku => Call to undefined method Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet()

Da bi se fiksiralo covek je lepo objasnio ako neko ima problema sa ovim :

Citat:

"CreateHelperSet" appears to be a method in 2.4. I adapted the "2.3 configuring the command line" code to make my "cli-config.php" file read like this, and it appears to work:

<?php
// cli-config.php
require_once "bootstrap.php";

$em = $entityManager;

$helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
));



http://www.doctrine-project.org/jira/browse/DDC-2486

[Ovu poruku je menjao alfa-pro dana 06.07.2013. u 14:32 GMT+1]

[Ovu poruku je menjao alfa-pro dana 06.07.2013. u 16:16 GMT+1]