witam,
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:
Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message '
[Semantical Error
] line 0, col 48 near 'lang = :
lang)': Error: 'lang' is not defined.' in /var/www/cms/library/Doctrine/ORM/Query/QueryException.php:47Stack 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}
i nie mam pomysłu gdzie robię błąd (IMG:
style_emoticons/default/smile.gif)
Ten post edytował kabanek 9.10.2011, 12:14:06