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 52

Mbokan ada yang bisa bantu gaess, terima kasih..

avatar momoji
@momoji

108 Kontribusi 44 Poin

Dipost 5 tahun yang lalu

1 Jawaban:

Jawaban Terpilih

Etdah utak atik baru nemu, ternyata permasalahan ada didalam file test.php, begini penampakan kode yang udah fix.. <pre> &lt;?php

require_once 'src/Way.php';

require_once 'bootstrap.php';

// Success Code $RAW_QUERY = 'SELECT * FROM way;';

$statement = $em-&gt;getConnection()-&gt;prepare($RAW_QUERY);

$statement-&gt;execute();

$result = $statement-&gt;fetchAll();

print_r($result);

//Fixed $query = $em-&gt;createQuery("SELECT u FROM Way u WHERE u.id = 1");

print_r($query-&gt;getResult()); </pre>

baru nyadar, kurang require_once('src/Way.php'), dan di $query = $em-&gt;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.

avatar momoji
@momoji

108 Kontribusi 44 Poin

Dipost 5 tahun yang lalu

Tanggapan

terima kasih sudah share jawabnnya

Login untuk ikut Jawaban