Doctrine php orm - dql - cara ngefix nya
Selamat malem agan sista, lama nggak ngepost masalah nih:D hehehe, jadi gini gaess, ane lagi belajar ulang Object Relationship Mapping di php, soalnya lupa lupa ingat, karena di php itu banyak sekali kontributor, jadi ane bingung, dan akhirnya ane males ngikutin sana sini hehehehe :D :).
Sebenarnya ane cuma mau ORM nya aja, karena udah cape dan lama juga kalo disuruh migrate database, harus bikin databasenya dari awal. Nah si ORM ini, awalnya ane pasangkan dengan laravel, nah pas dibundle ama laravel si bener bener aja.
Masalah terjadi ketika ane coba pake native, mungkin ane kelupaan apa gimana yah gaes, coba bantu ane pliss.
Jadi gini, pustaka yang ane download pake composer ane satuin jadi satu, gampangnya ane jadiin global module deh, biar sana sini bisa comot kode pustakanya, dan untuk menghemat memory lah.
Untuk migratenya udah bisa, DQL Atau kepanjangan dari Doctrine Query Language nya nggak berfungsi, pas pake RAW QUERY masih bisa mau dianya, tapi ane mikir kalo ntar pake database lain, semisal kayak postgresql yang ada fasilitas casting, dan nggak ada magic disitu, kan harus pake DQL nya.
Ane udah coba test beberapa kali, untuk insert udah bisa. itu juga pake RAW QUERY,
oke deh ini code bootstrap.php, ane potong sedikit biar gak kepanjangan.
<?php // bootstrap.php if (basename($_SERVER['SCRIPT_FILENAME']) == basename(__FILE__)) { header('HTTP/1.1 403 Forbidden'); die('Direct access not allowed'); exit(); }; use Doctrine\ORM\Tools\Setup; use Doctrine\ORM\EntityManager; require_once '/opt/composer/vendor/autoload.php'; // $db => Database Configuration $db = array( 'driver' => 'pdo_pgsql', 'host' => 'localhost', 'user' => 'postgres', 'password' => 'roottoor', 'dbname' => 'doctrine_list_db' ); // $ep => Entity Path $ep = array(__DIR__."/src"); // $idm => Is Dev Mod $idm = true; // $pd => Proxy Directory, $c => Cache $pd = $c = null; // $usar => Use Simple Annotation Reader $usar = false; $cfg = Setup::createAnnotationMetadataConfiguration($ep, $idm, $pd, $c, $usar); $em = EntityManager::create($db, $cfg);dan ini code Entitas class Way.php
<?php // src/Way.php use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="way") */ class Way{ /** * @ORM\Id * @ORM\Column(name="id", type="bigint") * @ORM\GeneratedValue */ private $id; /** * @ORM\Column(name="name", type="string", length=32) */ private $name; /** * @ORM\Column(name="about", type="string", length=500) */ private $about; /** * @ORM\Column(name="author", type="string", length=64) */ private $author; public function getName(){ return $this->name; } public function setName($name){ $this->name = $name; } public function getAbout(){ return $this->about; } public function setAbout($about){ $this->about = $about; } public function getAuthor(){ return $this->author; } public function setAuthor($author){ $this->author = $author; } }dan ini test codenya Test.php
<?php require_once 'bootstrap.php'; // Success Code $RAW_QUERY = 'SELECT * FROM way'; $statement = $em->getConnection()->prepare($RAW_QUERY); $statement->execute(); $result = $statement->fetchAll(); print_r($result); //Masih Error $query = $em->createQuery("SELECT * FROM way"); print_r($query->getResult());dan ini errornya
PHP Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message 'SELECT * FROM way' in /opt/composer/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:41 Stack trace: #0 /opt/composer/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(448): Doctrine\ORM\Query\QueryException::dqlError('SELECT * FROM w...') #1 /opt/composer/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(2230): Doctrine\ORM\Query\Parser->syntaxError('IdentificationV...', Array) #2 /opt/composer/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(1164): Doctrine\ORM\Query\Parser->SelectExpression() #3 /opt/composer/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(874): Doctrine\ORM\Query\Parser->SelectClause() #4 /opt/composer/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(843): Doctrine\ORM\Query\Parser->SelectStatement() #5 /opt/composer/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(268): Doctrine\ORM\Query\Parser->QueryLanguage() #6 /opt/composer/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser. in /opt/composer/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php on line 52Mbokan ada yang bisa bantu gaess, terima kasih..
Jawaban Terpilih
Etdah utak atik baru nemu, ternyata permasalahan ada didalam file test.php, begini penampakan kode yang udah fix..
<?php require_once 'src/Way.php'; require_once 'bootstrap.php'; // Success Code $RAW_QUERY = 'SELECT * FROM way;'; $statement = $em->getConnection()->prepare($RAW_QUERY); $statement->execute(); $result = $statement->fetchAll(); print_r($result); //Fixed $query = $em->createQuery("SELECT u FROM Way u WHERE u.id = 1"); print_r($query->getResult());baru nyadar, kurang require_once('src/Way.php'), dan di $query = $em->createQuery("SELECT u FROM Way u WHERE u.id = 1"), Way itu merujuk ke nama kelas, didalam folder src/Way.php, saya kira normal normal aja merujuk ke nama tabel asli didalam database.
108 Kontribusi 44 Poin
Jawaban
Etdah utak atik baru nemu, ternyata permasalahan ada didalam file test.php, begini penampakan kode yang udah fix..
<?php require_once 'src/Way.php'; require_once 'bootstrap.php'; // Success Code $RAW_QUERY = 'SELECT * FROM way;'; $statement = $em->getConnection()->prepare($RAW_QUERY); $statement->execute(); $result = $statement->fetchAll(); print_r($result); //Fixed $query = $em->createQuery("SELECT u FROM Way u WHERE u.id = 1"); print_r($query->getResult());baru nyadar, kurang require_once('src/Way.php'), dan di $query = $em->createQuery("SELECT u FROM Way u WHERE u.id = 1"), Way itu merujuk ke nama kelas, didalam folder src/Way.php, saya kira normal normal aja merujuk ke nama tabel asli didalam database.
Login untuk gabung berdiskusi
Pertanyaan Lainnya
Top Kontributor
- @dianarifr
642 Kontribusi 316 Poin
- @Nandar
626 Kontribusi 197 Poin
- @ahanafi
581 Kontribusi 310 Poin
- @Saputroandhi
509 Kontribusi 162 Poin
- @Dodi Sitorus
412 Kontribusi 145 Poin