标签: doctrine-orm

在Doctrine 2中指定十进制字段类型时,缩放和精度是什么意思?

我正在创建一个十进制字段来为我的Symfony2应用程序保存Doctrine2中的财务数据.

目前,它看起来像这样:

/**
 * @ORM\Column(type="decimal")
 */
protected $rate;
Run Code Online (Sandbox Code Playgroud)

当我输入一个值并且所述值持久保存到数据库时,它被舍入为整数.我猜我需要为该字段设置精度和比例类型,但我需要有人来解释他们究竟做了什么?

Doctrine2文档说:

precision:十进制(精确数字)列的精度(仅适用于十进制列)

scale:十进制(精确数字)列的比例(仅适用于十进制列)

但这并没有告诉我太多.

我猜测精度是要舍入的小数位数,所以我假设应该是2,但是什么是比例?规模是重要数字吗?

我的现场宣言应该是这样吗?: -

/**
 * @ORM\Column(type="decimal", precision=2, scale=4)
 */
protected $rate;
Run Code Online (Sandbox Code Playgroud)

database orm types symfony doctrine-orm

60
推荐指数
3
解决办法
6万
查看次数

Doctrine 2 ArrayCollection过滤方法

我可以在使用延迟加载时从Doctrine 2中的arrayCollection中过滤出结果吗?例如,

// users = ArrayCollection with User entities containing an "active" property
$customer->users->filter('active' => TRUE)->first()
Run Code Online (Sandbox Code Playgroud)

我不清楚滤波器方法是如何实际使用的.

orm lazy-loading arraycollection doctrine-orm

58
推荐指数
3
解决办法
10万
查看次数

Symfony2-Doctrine:ManyToMany关系未保存到数据库

我有两个名为Category和Item的PHP模型类.类别可能包含许多项目,而项目可能属于许多类别.我已经为这两个类创建了ManyToMany关系:

class Category
{
    /**
     * @ORM\ManyToMany(targetEntity="Item", mappedBy="categories", cascade={"persist"})
     */
    private $items;

    /**
     * Add items
     *
     * @param Ako\StoreBundle\Entity\Item $items
     */
    public function addItems(\Ako\StoreBundle\Entity\Item $items)
    {
        $this->items[] = $items;
    }

    /**
     * Get items
     *
     * @return Doctrine\Common\Collections\Collection 
     */
    public function getItems()
    {
        return $this->items;
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

class Item
{
    /**
     * @ORM\ManyToMany(targetEntity="Category", inversedBy="items", cascade={"persist"})
     * @ORM\JoinTable(name="item_category",
     * joinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id")},
     * inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}
     * )
     */
    private $categories;

    /**
     * Add categories
     *
     * @param Ako\StoreBundle\Entity\Category $categories
     */ …
Run Code Online (Sandbox Code Playgroud)

many-to-many symfony doctrine-orm

57
推荐指数
1
解决办法
5万
查看次数

在Doctrine 2中执行WHERE .. IN子查询

我想从具有特定商品的所有订单中选择订单商品.在SQL中我会这样做:

SELECT DISTINCT i.id, i.name, order.name 
FROM items i 
JOIN orders o ON i.order_id=o.id 
WHERE o.id IN (
   SELECT o2.id FROM orders o2
   JOIN items i2 ON i2.order_id=o2.id AND i2.id=5
)
AND i.id != 5
ORDER BY o.orderdate DESC
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

如何使用查询构建器执行此查询?

sql database doctrine-orm

56
推荐指数
2
解决办法
7万
查看次数

Symfony应用程序中的Doctrine实体和业务逻辑

欢迎任何想法/反馈:)

我遇到了如何在一个大型Symfony2应用程序中处理我的Doctrine2实体的业务逻辑的问题.(抱歉帖子长度)

在阅读了许多博客,食谱和其他资源后,我发现:

  • 实体可能仅用于数据映射持久性("贫血模型"),
  • 控制器必须更小,
  • 域模型必须与持久层分离(实体不知道实体管理器)

好吧,我完全同意它,但是: 在哪里以及如何处理域模型上复杂的业务规则?


一个简单的例子

我们的域名模型:

  • 一个可以使用角色
  • a 角色可以由不同的组使用
  • 一个用户可以属于多个与许多角色,

SQL持久层中,我们可以将这些关系建模为:

在此输入图像描述

我们的具体业务规则:

  • 仅当角色附加到组时,用户才能在组中拥有角色.
  • 如果我们从组G1中分离角色R1,则必须删除具有组G1和角色R1的所有UserRoleAffectation

这是一个非常简单的例子,但我想知道管理这些业务规则的最佳方法.


找到解决方案

1-服务层实现

使用特定的Service类:

class GroupRoleAffectionService {

  function linkRoleToGroup ($role, $group)
  { 
    //... 
  }

  function unlinkRoleToGroup ($role, $group)
  {
    //business logic to find all invalid UserRoleAffectation with these role and …
Run Code Online (Sandbox Code Playgroud)

php domain-driven-design symfony doctrine-orm

56
推荐指数
2
解决办法
1万
查看次数

Doctrine 2继承映射与关联

注意:如果我不想要的话,将接受"不可能"的答案

关于继承映射Doctrine 2文档中,它说有两种方法:

  • 单表继承(STI)
  • 类表继承(CTI)

两者都有警告:

如果您将STI/CTI实体用作多对一或一对一实体,则不应将继承层次结构的较高级别某个类用作"targetEntity",而只应使用没有子类的那些类.否则,Doctrine不能创建该实体的代理实例,并且总是急切地加载该实体.

那么,我如何继续使用与基类(抽象)类的关联继承?(并保持当然的表现)


用户有很多Pet(抽象类扩展为DogCat).

我想做的事 :

class User {
    /**
     * @var array(Pet) (array of Dog or Cat)
     */
    private $pets;
}
Run Code Online (Sandbox Code Playgroud)

由于Doctrine文档中的警告,我应该这样做:

class User {
    /**
     * @var array(Dog)
     */
    private $dogs;
    /**
     * @var array(Cat)
     */
    private $cats;
}
Run Code Online (Sandbox Code Playgroud)

这很烦人,因为我放弃了继承的好处!

注意:我没有为映射到DB添加Doctrine注释,但您可以理解我的意思

php orm inheritance doctrine doctrine-orm

55
推荐指数
2
解决办法
2万
查看次数

Doctrine和LIKE查询

我有Doctrine的实体:

<?php
/**
 * @Entity
 * @Table(name="orders")
 */
class Orders {
    /** @Id @Column(name="OID",type="integer") @GeneratedValue */
    private $id;
    /** @Column(name="Product",type="string")*/
        private $product;
    /** @Column(name="RegCode",type="string")*/
        private $reg_code;
    /** @Column(name="OrderEmail",type="string")*/
    private $email;
}
Run Code Online (Sandbox Code Playgroud)

我需要像这样进行查询:

select * from `orders` where `OrderEmail`='some@mail.com' and `Product` LIKE 'My Products%'
Run Code Online (Sandbox Code Playgroud)

我尝试处理查询没有像:

$em->getRepository("Orders")->findByEmailAndProduct($uname,$product);
Run Code Online (Sandbox Code Playgroud)

但它会犯错误.为什么?没有DQL我可以执行此查询吗?我想让这个查询使用魔术方法findBy**

php mysql doctrine-orm

55
推荐指数
2
解决办法
10万
查看次数

Doctrine数组vs simple_array vs json_array

我使用symfony和doctrine作为ORM,在可用类型中我有数组,simple_arrayjson_array 我想知道它们之间有什么区别?何时使用其中一个?你有每个展示案例来说明差异吗?

我已经在某些应用程序中使用了simple_array,但我发现它在formType中没有很好地呈现...(或者我可能没有使用它!?)

为了说明我的问题,这是一个展示案例:

我有一个任务,我必须在特定的一周运行所以我创建具有days属性的TaskEntity

天就像那样:

$days = array(
    1=>true,
    2=>true,
    3=>true,
    4=>true,
    5=>true,
    6=>false,
    7=>false
);
Run Code Online (Sandbox Code Playgroud)

但我不知道巫婆类型可供选择......

php arrays symfony doctrine-orm

55
推荐指数
2
解决办法
5万
查看次数

Symfony2文件一步一步上传

我还在学习Symfony2并且不了解如何上传文件.

别担心,我已经检查了文档.这真的很好,但我的问题没有在任何教程中解释.

我正在寻找有关如何使用Symfony2上传文件但有所有人需要的所有东西的指导(例如扩展的约束,基于id和东西重命名文件,在db中存储路径等等)

我找到了很好的教程,试图混合它们但没有成功.每次出现不同的问题:文件在表单上的每次提交时重新上传(即使文件字段为空),guessExtension也不可能使用,tmp路径存储在数据库而不是正确的路径,文件没有移动,不可能在重命名中使用了id,因为id是自动递增的,因此尚未生成).

所以,我会提出一个"标准"实体,比方说:Photo.php

/**
 * Photo
 *
 * @ORM\Table(name="photo")
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class Photo
{
    // Annotation for the id and auto increment etc
    private $id;

    /**
     * @var string
     * @Assert\File( maxSize = "3072k", mimeTypesMessage = "Please upload a valid Image")
     * @ORM\Column(name="image", type="string", length=245, nullable=false)
     */
    private $image

    private $title

    private $description

    // all the function get, set for the 4 previous variables
}
Run Code Online (Sandbox Code Playgroud)

和控制器:

public function addPhotoAction()
{
    $add_photo = new …
Run Code Online (Sandbox Code Playgroud)

upload file formbuilder symfony doctrine-orm

55
推荐指数
3
解决办法
9万
查看次数

如何在Doctrine 2 DQL中使用now()?

$ php app/console doctrine:query:dql'SELECT now()'

[Doctrine\ORM\Query\QueryException] [语法错误]第0行,第7行:错误:预期的已知函数,得到'现在'

如何在Doctrine DQL中使用MySQL now()函数?

mysql dql symfony doctrine-orm

54
推荐指数
1
解决办法
3万
查看次数