Warum nicht Lehre 2 finden meine Einheiten?
Ich versuche zu lernen, mit Lehre 2, indem Sie eine sehr einfache script holt die Daten aus meiner Datenbank. Das problem ist, dass ich finde keine Dokumentation welche erklären, wie die Lehre findet und nutzt meine Zuordnung von Entitäten. Und so, wenn es sich beschwert, dass es nicht die Suche nach einer Person, ich weiß nicht, was zu tun ist um das problem zu lösen. Betrachten Sie die folgende Struktur in meinem www-Ordner:
- Lehre/
- Personen/
-
- person.php
- myTestPage.php
person.php
<?php
/** @Entity @Table(name="person")*/
class person
{
/**
* @Id @Column(type="integer")
*/
protected $uid;
}
?>
myTestPage.php
<?php
require "Doctrine/Doctrine/ORM/Tools/Setup.php";
$lib = "Doctrine";
Doctrine\ORM\Tools\Setup::registerAutoloadDirectory($lib);
use Doctrine\ORM\Tools\Setup,
Doctrine\ORM\EntityManager;
$paths = array("/Entities");
$isDevMode = true;
$dbParams = array("driver" => "pdo_mysql",
"host" => "myhost.ca",
"user" => "Shawn",
"password" => "noneofyourbusiness",
"dbname" => "testDB");
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$em = EntityManager::create($dbParams, $config);
$qb = $em->createQueryBuilder();
$qb->select(array('uid'))
->from('person', 't');
$query = $qb->getQuery();
$result = $query->getResult();
echo $result;
?>
Wenn ich Besuch myTestPage.php ich bekomme folgende Fehlermeldung:
Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException'
mit der Meldung '[Semantische Fehler] Zeile 0, col 24 in der Nähe von 'person':
Fehler: Klasse "person" ist nicht definiert.' in
C:\wamp\www\Doctrine\Doctrine\ORM\Query\QueryException.php auf der Linie 47
Das problem scheint zu sein, dass die Lehre nicht finden können person.php aber wie kann ich dieses Problem lösen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nicht genau weiß, was der "re1_chercheur" bedeutet, aber wenn ich versuchte Ihren code, beschwerte Sie sich über die person nicht definiert wird, so mache ich das und es funktionierte.
Natürlich sollte dies gelöst werden, indem man mit einem autoloader von einer Art, aber ich denke, Lehre, hat eine Lösung für das auch. Ich habe nicht mit Ihr autoloader, da habe ich meine eigenen und die Nutzung des PSR-konform autoloading.
Auch in Ihrem wählen Sie, wenn Sie wollen einfach nur die "uid", verwenden Sie "t.uid". "t" ist der alias der Klasse "person", also an anderen Orten in der Abfrage, Sie werden mit "t" zu bekommen, um die Eigenschaften (Sie tun könnte ->where("t ist.uid = someNumber")). Wenn Sie das gesamte Objekt markieren("t");
Fand ich die Lehre Dokumentation sehr hilfreich, so stellen Sie sicher gehen in der Reihenfolge angeordnet ist, und du wirst den Dreh in kürzester Zeit.
Ich weiß, das ist nicht eine genaue Antwort, aber vielleicht gibt es Punkte, die Sie in die richtige Richtung.
person
(ich habe es jetzt). Wenn ich manuellrequire "Entities/person.php";
, die Fehlermeldung ändert und sagt, dass die uid ist nicht definiert. Dann füge icht.
bevor der name der Tabelle und jetzt funktioniert alles. So waren Sie alle Weg. Der autoloader funktioniert nicht, und ich kann das problem umgehen, indem Sie manuell erfordert die class-Datei. Ich würde gerne wissen, warum der autoloader funktioniert nicht, obwohl...Setup::registerAutoloadPEAR(); $cl = new Doctrine\Common\ClassLoader('Entities', __DIR__); $cl->register();