我正在使用symfony,我想知道如何使用doctrine:dql任务进行简单插入.
./symfony doctrine:dql "<what should I put here?>"
Run Code Online (Sandbox Code Playgroud) 我有两个小问题:
actAs: { Timestampable: ~ }
Run Code Online (Sandbox Code Playgroud)
什么"〜"在上面的代码中意味着什么?
然后,我看到表中actAs: { Timestampable: ~ }
有两个字段(created_at和updated_at).
是否可以将updated_at字段绑定到特定字段(我更新此字段,然后updated_at获取新值)?
我正在几个Web应用程序项目中使用Doctrine和Symfony.
我已经优化了这些项目中的许多查询,只选择数据库中所需的字段.但是随着时间的推移,新的功能被添加了 - 在一些情况下 - 在代码中使用了额外的字段,导致Doctrine延迟加载器重新查询数据库并在一些页面上驱动查询数量从3到100+
所以我需要更新原始查询以包含所有必填字段.但是,Doctrine似乎没有一种简单的方法可以记录哪个字段导致发出附加查询 - 因此,筛选代码以查找原始查询中不存在的字段的使用是一项艰苦的工作.
当getter访问一个没有水合的字段时,有没有办法让Doctrine记录?
我的schema.yml
Organisation:
columns:
id: { type: integer(4), notnull: true, unique: true, primary: true, autoincrement: true }
name: { type: string(100), notnull: true, unique: true }
parent_organisation_id: { type: integer(4), notnull: false }
relations:
ParentOrganisation: { class: Organisation, local: parent_organisation_id, foreignAlias: ChildOrganisations }
Run Code Online (Sandbox Code Playgroud)
一些组织存储了整数值0,并且没有这样的organisation_id.令我惊讶的是,当我运行此代码时
class organisationActions extends autoOrganisationActions{
public function executeEdit(sfWebRequest $request){
$this->organisation = $this->getRoute()->getObject();
$p = $this->organisation->getParentOrganisationId();
var_dump($p);
Run Code Online (Sandbox Code Playgroud)
结果是字符串(1)"0"
为什么这不返回整数,所以我可以比较=== 0
是否可以在Doctrine_RawSql查询中使用聚合值?这是我正在尝试做的事情:
$q = new Doctrine_RawSql();
$q->select('{q.*}, AVG(a.value) AS avg');
$q->from('-- complex from clause');
$q->addComponent('q', 'Question');
Run Code Online (Sandbox Code Playgroud)
但是,Doctrine创建的SQL仅保留表中的列question
并省略聚合值avg
.
我有以下DQL(Doctrine1.2):
$dql->select('sum(t.column1) column1, t.column2')
->from('Table t')
->groupBy('t.column2')
->orderBy('column1');
Run Code Online (Sandbox Code Playgroud)
但生成的SQL与以下DQL相同:
$dql->select('sum(t.column1) column1, t.column2')
->from('Table t')
->groupBy('t.column2')
->orderBy('t.column1'); //Ordered by column1 not by sum(t.column1)
Run Code Online (Sandbox Code Playgroud)
是否可以强制Doctrine使用别名column1
而不是列名t.column1
?
我需要这个,因为我想从两个非常相似的DQL的模型中获得相同的输出格式.(最近由同一模板呈现).另一个DQL看起来像这样:
$dql->select('t.column1, t.column2')
->from('Table t')
->orderBy('t.column1');
Run Code Online (Sandbox Code Playgroud)
可能的解决方法是选择sum(t.column1)
两次.首先使用别名column1
,第二次使用其他别名,为什么在passwd之后使用orderBy
函数,但它看起来不是最清晰的解决方案.
有什么建议?
谢谢
我有一个一对多的架构:桌面有很多账单.是否可以使用某些Bill记录获取所有Desk记录.
我想这样做:
//DeskTable.class.php
public function getDesks()
{
$q = $this->createQuery('d')
->leftJoin('d.Bills b')
->where('b.is_open = ?', true);
return $q->execute();
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了一张有开放票据的书桌列表,而我需要所有书桌.这可能吗?
我完全不是一个sql的孩子,所以请耐心等待我.
我正在使用symfony 1.4和使用Doctrine ORM进行开发.在构建模式和模型之后,我有一些用于数据库的类.我也可以使用Doctrine_query ....我唯一想知道的是:
我需要更新表格.
Doctrine_Query::create()->update('table')->.....->execute().
Run Code Online (Sandbox Code Playgroud)
要么
$tbl = new Table();
$tbl->assignIdentifier($id);
if($tbl->load()){
$tbl->setFieldname('value');
$tbl->save();
}
Run Code Online (Sandbox Code Playgroud)
我怎么能得知它是否是成功的查询结果?以及更新了多少行.
ps同样的问题是删除操作.
我想知道是否还有使用doctrine的魔术方法来寻找空值.例如:
Doctrine::getTable('myClass')->findByDeletedAt(null);
Run Code Online (Sandbox Code Playgroud)
基本上,我想返回所有未删除的记录.我已经尝试了上述内容,但它似乎没有用.
有任何想法吗?
我有一个问题:
$q->andWhere($q->getRootAlias().'.is_published = ?', 1);
$q->andWhere($q->getRootAlias().'.published_at >= ?', time());
$q->leftJoin($q->getRootAlias().'.EventLdapGroup l');
$q->andWhereIn('l.ldap_group_id', $permissions_id );
$q->orWhere('l.ldap_group_id IS NULL);
Run Code Online (Sandbox Code Playgroud)
哪个输出:
FROM
Event r LEFT JOIN r.EventLdapGroup l
WHERE
r.is_published = ? AND
r.published_at >= ? AND
l.ldap_group_id IN (?, ?) OR
l.ldap_group_id IS NULL
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,如果ldap_group_id
为null(最后一个条件),它将删除is_published
和published_at
条件.
我想要类似的东西[值是在ldap_group_id中,或者它是否为null]:
FROM
Event r LEFT JOIN r.EventLdapGroup l
WHERE
r.is_published = ? AND
r.published_at >= ? AND
(l.ldap_group_id IN (?, ?) OR l.ldap_group_id IS NULL)
Run Code Online (Sandbox Code Playgroud)
我必须说,我已经迷失在条件复杂的地方.怎么实现呢?
谢谢
doctrine-1.2 ×10
doctrine ×9
php ×6
orm ×2
symfony-1.4 ×2
symfony1 ×2
behavior ×1
doctrine-orm ×1
dql ×1
findby ×1
insert ×1
mysql ×1
sql ×1
symfony ×1