我在尝试ORDER BY
使用Doctrine 2 ORM 在DQL的子句中实现动态排序时遇到错误.
这是我的代码片段:
$queryBuilder = $categoryEntity->createQueryBuilder('category');
$queryBuilder->distinct();
$queryBuilder->join('Category\Entity\CategoryName', 'category_name', 'WITH', 'category.id = category_name.category');
if($column == 'status'){
$queryBuilder->orderBy("category.status $order");
}else{
$queryBuilder->orderBy("category_name.name $order");
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
[语法错误]第0行,第189列:错误:字符串的预期结束,得到'ASC'
构建自定义实体存储库时遇到一些问题.
尝试自定义实体存储库时,我有以下致命错误
Fatal error: Uncaught exception 'BadMethodCallException' with message 'Undefined method 'getByParentId'. The method name must start with either findBy or findOneBy!' in C:\Users\user\Desktop\projects\interview\application\libraries\Doctrine\ORM\EntityRepository.php:215 Stack trace: #0 C:\Users\user\Desktop\projects\interview\application\controllers\CommentController.php(58): Doctrine\ORM\EntityRepository->__call('getByParentId', Array) #1 C:\Users\user\Desktop\projects\interview\application\controllers\CommentController.php(58): Doctrine\ORM\EntityRepository->getByParentId('1') #2 [internal function]: CommentController->viewCommentsListByParentId('1') #3 C:\Users\user\Desktop\projects\interview\system\core\CodeIgniter.php(359): call_user_func_array(Array, Array) #4 C:\Users\user\Desktop\projects\interview\index.php(203): require_once('C:\Users\user\D...') #5 {main} thrown in C:\Users\user\Desktop\projects\interview\application\libraries\Doctrine\ORM\EntityRepository.php on line 215
Run Code Online (Sandbox Code Playgroud)
我的项目结构是Mappings Repositories Entities Proxies模型
我的doctrine.php有这样的存储库加载器
// load the repositories
$repositoryClassLoader = new \Doctrine\Common\ClassLoader('Repositories', APPPATH.'models');
$repositoryClassLoader->register();
Run Code Online (Sandbox Code Playgroud)
我的模型类有以下声明
namespace Entities;
use Doctrine\ORM\Mapping as ORM;
/**
* Entities\Comment
* @Entity (repositoryClass="Repositories\CommentRepository") …
Run Code Online (Sandbox Code Playgroud) 我在我的实体定义中使用doctrine注释来定义每个变量行为,即:
@ORM\Column(type="string", length=50, nullable=false)
Run Code Online (Sandbox Code Playgroud)
如果我提交表单,将该字段留空,则通过验证,但是(对于corse)我收到有关INSERT语句的错误,因为他无法插入NULL值.这怎么可能?
在Symfony2表单中,当试图获取实体时,Symfony期望接收QueryBuilder对象,但有时没有返回实体.在这种情况下,会出现一条错误消息:
期望类型为"Doctrine\ORM\QueryBuilder"的参数,给出"NULL"
如何使query_builder允许选项没有可用的实体.
$builder
->add('client', 'entity', array(
'class' => 'Faktura\FakturaBundle\Entity\Client',
'query_builder' => function(\Web\MyBundle\Repository\ClientRepository $er) use ($company){
return $er->getClients($company);
))
;
Run Code Online (Sandbox Code Playgroud)
ClientRepository.php
public function getClients($company)
{
$qb = $this->createQueryBuilder('c')
->select('c')
->where('c.company = :company')
->setParameter('company', $company)
->getQuery();
return $qb->getResult();
}
Run Code Online (Sandbox Code Playgroud)
实际上,它只是基本$er->findBy(array('company' => $company))
方法,但我使用自定义getClients()
方法
我有以下内容 composer.json
{
"name": "zendframework/skeleton-application",
"description": "Skeleton Application for ZF2",
"license": "BSD-3-Clause",
"keywords": [
"framework",
"zf2"
],
"homepage": "http://framework.zend.com/",
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.2.*",
"doctrine/doctrine-orm-module": "*",
"bjyoungblood/bjy-authorize": "1.2.*",
"zf-commons/zfc-user": "dev-master",
"zendframework/zend-developer-tools": "*",
"zendframework/zftool": "dev-master",
"swiftmailer/swiftmailer" : "*",
"mwillbanks/zfc-twitter-bootstrap": "*"
}
}
Run Code Online (Sandbox Code Playgroud)
添加require后zf-commons/zfc-user-doctrine-orm
,Composer无法执行命令,composer update
给出大错误消息:
composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个Doctrine DBAL querybuilder对象并在其中设置一个参数.(使用postgres db,dbal 2.3.4,学说
$connection = $this->_em->getConnection();
$qb = $connection->createQueryBuilder();
$qb->select('tbl_user_contract.pkid AS pkid');
$qb->from('tbl_user_contract', 'tbl_user_contract');
$qb->join('tbl_user_contract', 'tbl_user', 'tbl_user', 'tbl_user_contract.fk_user = tbl_user.pkid');
$qb->where('tbl_user.pkid = :userid');
$qb->setParameter(':userid', 10);
Run Code Online (Sandbox Code Playgroud)
当我尝试获取此querybuilder对象的结果时,我收到以下错误:
SQLSTATE[08P01]: <<Unknown error>>: 7 ERROR: bind message supplies 0 parameters,
but prepared statement "pdo_stmt_00000002" requires 1
Run Code Online (Sandbox Code Playgroud)
当我检查postgres日志时,我看到传递的查询,我注意到它需要一个参数,但我不会传入参数.
我尝试在where表达式本身设置id(不使用预处理语句),这是有效的.但我真的想让这个准备好的陈述.
谁知道如何解决这个问题?
提前致谢
我完全是Doctrine和ZF2的新手,来自C#env.从几天开始学习教义和zf2.并尝试学习基本的东西,以便我可以 在未来几天内构建RESTFull服务API.现在,我试图将原则获取All()结果输入到json但未能这样做.mys API客户端(backbone.js)工作正常,它是结果,但显示空对象
我的控制器代码是这样的
public function getList() {
$repository = $this->getEntityManager()->getRepository('Application\Entity\Test');
$posts = $repository->findAll();
echo var_dump((array)$posts);
header('Access-Control-Allow-Origin:http://api.server.com');
return new JsonModel($posts);
}
Run Code Online (Sandbox Code Playgroud)
var_dump结果
array(2) {
[0]=>
object(Application\Entity\Test)#339 (2) {
["id":"Application\Entity\Test":private]=>
int(2)
["name":"Application\Entity\Test":private]=>
string(5) "Kumar"
}
[1]=>
object(Application\Entity\Test)#340 (2) {
["id":"Application\Entity\Test":private]=>
int(1)
["name":"Application\Entity\Test":private]=>
string(8) "Panindra"
}
}
Run Code Online (Sandbox Code Playgroud)
而我的JSONModel输出是[{},{}]
.
我想将其构建为RESTFull服务
我目前正在研究一个带有doctrine2的symfony2.3项目,试图在Sonata后端实现个人翻译管理.
翻译基于doctrine2可翻译行为模型:https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/translatable.md ,更准确地说是个人翻译.
管理表单使用的是TranslatedFieldType.php的symfony2.3版本.
我的实体类如下:
<?php
namespace Hr\OnlineBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @Gedmo\TranslationEntity(class="Hr\OnlineBundle\Entity\CategoryTranslation")
*/
class Category
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
private $id;
/**
* @Gedmo\Translatable
* @ORM\Column(length=64)
*/
private $title;
/**
* @Gedmo\Translatable
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\OneToMany(
* targetEntity="CategoryTranslation",
* mappedBy="object",
* cascade={"persist", "remove"}
* )
*/
private $translations;
public function __construct()
{
$this->translations = …
Run Code Online (Sandbox Code Playgroud) 我有一个实体即Users
.我想在Doctrine中创建这个实体的getter和setter,以便Doctrine可以读取它.
我怎么能这样做,有人能为我提供基本的例子吗?我是初学者
如何在此数据库表中插入数据?
这是我的用户实体
<?php
/**
* @Entity
* @Table(name="users")
* Total Number of Columns : 32
*/
class Users{
/* Attributes of Users */
/**
* @Id
* @Column(type="integer")
* @GeneratedValue
* @dummy
* @Assert\NotEmpty
*/
private $id;
/**
* @Column(type="string")
* @Assert\NotEmpty
*/
private $name;
/**
* @Column(type="string")
* @Assert\NotEmpty
*/
private $email;
}
?>
Run Code Online (Sandbox Code Playgroud) 我在symfony2中创建一个实体,我将实体设置为createddatetime和updateddatetime,但是当我在控制器中使用setter时,错误发生在这样
FatalErrorException: Error: Call to a member function format() on a non-object in C:\wamp\www\QuickBacklog\vendor\doctrine\dbal\lib\Doctrine\DBAL\Types\DateTimeType.php line 44
Run Code Online (Sandbox Code Playgroud)
这是我的实体代码:
/**
* Set createdDatetime
*
* @param \DateTime $createdDatetime
* @return Sections
*/
public function setCreatedDatetime($createdDatetime)
{
$this->createdDatetime = $createdDatetime;
return $this;
}
/**
* Get createdDatetime
*
* @return \DateTime
*/
public function getCreatedDatetime()
{
return $this->createdDatetime;
}
/**
* Set updatedDatetime
*
* @param \DateTime $updatedDatetime
* @return Sections
*/
public function setUpdatedDatetime($updatedDatetime)
{
$this->updatedDatetime = $updatedDatetime;
return $this;
}
/** …
Run Code Online (Sandbox Code Playgroud) doctrine-orm ×10
symfony ×6
doctrine ×3
php ×3
annotations ×1
behavior ×1
codeigniter ×1
composer-php ×1
forms ×1
json ×1
postgresql ×1
sonata-admin ×1
symfony-2.3 ×1
validation ×1
zfcuser ×1