staram się nauczyć doctrine 2 i mam problem. Otóż stworzyłem taką oto klasę:
<?php namespace Cms\Entity; /** * Konfiguracja * @Table(name="config") * @Entity */ class Config extends \Cms\Model\Base { /** * @var Config */ /** * Identyfikator * @var integer $id * @Column(name="id", type="integer", nullable="false") * @Id * @GeneratedValue(strategy="IDENTITY") */ private $id; /** * Nazwa konfiguracji * @Column(type="string", length=255, nullable="false",unique="true") * @var string */ private $key; /** * Wartość * @Column(type="string", length=255, nullable="false") * @var string */ private $value; /** * Język, dla którego jest dana opcja * @Column(type="string", length=2, nullable="true") * @var string */ private $lang; /** * tablica, gdzie przetrzymuję konfigurację * @var array */ /** * Inicjalizacja */ function init() { $request = \Zend_Controller_Front::getInstance()->getRequest(); $lang = $request->getParam('lang', 'pl'); $query = $this->_queryBuilder->select('conf') ->from('\Cms\Entity\Config', 'conf') ->where('lang = :lang') ->orWhere('lang IS NULL'); $query->setParameter('lang', $lang); self::$_configs = $query->getQuery()->execute(); } /** * Zwracja instancję klasy \Cms\Entity\Config * @return Config */ { if (!self::$_instance instanceof \Cms\Entity\Config) { self::$_instance = new \Cms\Entity\Config(); } return self::$_instance; } /** * * @param string $property * @return string */ function __get($property) { return $this->$property; } /** * * @param string $property * @param string $value */ function __set($property, $value) { $this->$property = $value; } }
w której chcę trzymać konfigurację pobraną z bazy danych. Problem rodzi się w momencie, gdy chcę wykonać zapytanie:
function init() { $request = \Zend_Controller_Front::getInstance()->getRequest(); $lang = $request->getParam('lang', 'pl'); $query = $this->_queryBuilder->select('conf') ->from('\Cms\Entity\Config', 'conf') ->where('lang = :lang') ->orWhere('lang IS NULL'); $query->setParameter('lang', $lang); self::$_configs = $query->getQuery()->execute(); }
dostaję wtedy wyrzucony wyjątek:
Stack trace: #0 /var/www/cms/library/Doctrine/ORM/Query/Parser.php(397): Doctrine\ORM\Query\QueryException::semanticalError('line 0, col 48 ...') #1 /var/www/cms/library/Doctrine/ORM/Query/Parser.php(523): Doctrine\ORM\Query\Parser->semanticalError(''lang' is not d...', Array) #2 /var/www/cms/library/Doctrine/ORM/Query/Parser.php(211): Doctrine\ORM\Query\Parser->_processDeferredIdentificationVariables() #3 /var/www/cms/library/Doctrine/ORM/Query/Parser.php(278): Doctrine\ORM\Query\Parser->getAST() #4 /var/www/cms/library/Doctrine/ORM/Query.php(203): Doctrine\ORM\Query\Parser->parse() #5 /var/www/cms/library/Doctrine/ORM/Query.php(223): Doctrine\ORM\Query->_parse() #6 /var/www/cms/library/Doctrine/ORM/AbstractQuery.php(519): Doctrine\ORM\Query->_doExecute() #7 /var/www/cms/library/Cms/Entity/C in /var/www/cms/library/Zend/Controller/Plugin/Broker.php on line 336
zapytanie, które buduję to:
SELECT conf FROM \Cms\Entity\Config conf WHERE (lang = :lang) OR (lang IS NULL)
no i nie mogę doszukać się błędu.. Mógłbym prosić o pomoc?
problem rozwiązałem, wystarczyło, abym napisał:
$query = $this->_queryBuilder->select('conf') ->from('\Cms\Entity\Config', 'conf') ->where('conf.lang = :lang') ->orWhere('conf.lang IS NULL');
jednak mam nadal problem, leczy przy dodawaniu nowych wartości do bazy danych. Robię to tak:
$config = new Config(); $config->key = $key; $config->value = $value; $this->_entityManager->persist($config); $this->_entityManager->flush();
i w tym miejscu dostaję wyjatek:
Cytat
Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key, value) VALUES ('test', 'test')' at line 1
Stack trace:
#0 /var/www/cms/library/Doctrine/DBAL/Statement.php(131): PDOStatement->execute(NULL)
#1 /var/www/cms/library/Doctrine/ORM/Persisters/BasicEntityPersister.php(216): Doctrine\DBAL\Statement->execute()
#2 /var/www/cms/library/Doctrine/ORM/UnitOfWork.php(697): Doctrine\ORM\Persisters\BasicEntityPersister->executeInserts()
#3 /var/www/cms/library/Doctrine/ORM/UnitOfWork.php(280): Doctrine\ORM\UnitOfWork->executeInserts(Object(Doctrine\ORM\Mapping\ClassMetadata))
#4 /var/www/cms/library/Doctrine/ORM/EntityManager.php(324): Doctrine\ORM\UnitOfWork->commit()
#5 /var/www/cms/library/Cms/Entity/Config.php(116): Doctrine\ORM\EntityManager->flush()
#6 /var/www/cms/application/frontend/modules/default/controllers/IndexController.php(8): Cms\Entity\Config->set('test', 'test')
#7 /var/www/cms/library/Zend/Controller/Action.php(516): IndexController->indexAction()
#8 /var/www/cms/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
#9 /var/www/cms/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#10 /var/www/cms/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#11 /var/www/cms/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#12 /var/www/cms/public/index.php(48): Zend_Application->run()
#13 {main}
Stack trace:
#0 /var/www/cms/library/Doctrine/DBAL/Statement.php(131): PDOStatement->execute(NULL)
#1 /var/www/cms/library/Doctrine/ORM/Persisters/BasicEntityPersister.php(216): Doctrine\DBAL\Statement->execute()
#2 /var/www/cms/library/Doctrine/ORM/UnitOfWork.php(697): Doctrine\ORM\Persisters\BasicEntityPersister->executeInserts()
#3 /var/www/cms/library/Doctrine/ORM/UnitOfWork.php(280): Doctrine\ORM\UnitOfWork->executeInserts(Object(Doctrine\ORM\Mapping\ClassMetadata))
#4 /var/www/cms/library/Doctrine/ORM/EntityManager.php(324): Doctrine\ORM\UnitOfWork->commit()
#5 /var/www/cms/library/Cms/Entity/Config.php(116): Doctrine\ORM\EntityManager->flush()
#6 /var/www/cms/application/frontend/modules/default/controllers/IndexController.php(8): Cms\Entity\Config->set('test', 'test')
#7 /var/www/cms/library/Zend/Controller/Action.php(516): IndexController->indexAction()
#8 /var/www/cms/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
#9 /var/www/cms/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#10 /var/www/cms/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#11 /var/www/cms/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#12 /var/www/cms/public/index.php(48): Zend_Application->run()
#13 {main}
i nie mam pomysłu gdzie robię błąd
