小编Ocr*_*ius的帖子

数据库抽象层和数据访问层有什么区别?

我实际上陷入了三层结构.我浏览了互联网,发现了两个术语"数据库抽象层"和"数据访问层".

两者有什么不同?

data-access-layer 3-tier dbal doctrine-dbal

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

Doctrine2 ORM不会保存对DateTime字段的更改

我有一个用户实体:

use Doctrine\ORM\Mapping as ORM;

/**
 * ExampleBundle\Entity\User
 *
 * @ORM\Entity()
 */
class User
{
    // ...

    /**
     * @ORM\Column(type="service_expires_at", type="date", nullable=true)
     */
    private $service_expires_at;

    public function getServiceExpiresAt()
    {
        return $this->service_expires_at;
    }

    public function setServiceExpiresAt(\DateTime $service_expires_at)
    {
        $this->service_expires_at = $service_expires_at;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将用户更新service_expires_at为以下内容时,更新后的service_expires_at不会保存回数据库:

$date = $user->getServiceExpiresAt(); 

var_dump($date->format('Y-m-d')); // 2013-03-08

$date->modify('+10 days');

var_dump($date->format('Y-m-d')); // 2013-03-18

$user->setServiceExpiresAt($date);

$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

但是,如果我传递一个新DateTime对象service_expires_at,则更新的值将正确保存:

$date = $user->getServiceExpiresAt(); 

$date->modify('+10 days');

$user->setServiceExpiresAt(new \DateTime($date->format('Y-m-d'));

$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

oop encapsulation doctrine-orm

21
推荐指数
1
解决办法
6673
查看次数

在实体刷新上创建实体

我怎样才能做到这一点:

例如,我有一个名为Issue的实体.我需要记录该实体字段的更改.
如果用户更改了Issue实体上的"status"字段,我需要与用户一起创建一个关于它的数据库记录,该用户更改了字段,以前的状态和新状态.

使用:Symfony2 + doctrine2.

symfony doctrine-orm

11
推荐指数
1
解决办法
7395
查看次数

Doctrine自定义类型总是改变表

我添加了一个自定义类型:

namespace My\SuperBundle\Types;

use Doctrine\DBAL\Types\Type;
use Doctrine\DBAL\Platforms\AbstractPlatform;

class Money extends Type
{
    const MONEY = 'money';

    public function getSqlDeclaration(
        array $fieldDeclaration,
        AbstractPlatform $platform
    ) {
        return 'DECIMAL(10,2)';
    }

    public function getName()
    {
        return self::MONEY;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序启动:

namespace My\SuperBundle;

use Doctrine\DBAL\Types\Type;
use My\SuperBundle\Types\Money;

class MyBSuperBundle extends Bundle
{
    public function boot()
    {
        //add custom quantity and wight types
        $em = $this->container->get('doctrine.orm.entity_manager');

        if(!Type::hasType(Money::MONEY)) {
            Type::addType(Money::MONEY, 'My\SuperBundle\Types\Money');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

每次我用以下内容更新数据库:

php app/console doctrine:schema:update --dump-sql
Run Code Online (Sandbox Code Playgroud)

我一直得到以下内容:

ALTER TABLE product_price CHANGE …
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm

11
推荐指数
2
解决办法
2507
查看次数

Doctrine2:任意连接和单表继承

注意:这是在项目的问题跟踪器上报告的ORM限制

我正面临一个问题,即使用Doctrine 2.3中引入的实体类(层次结构的根)上的任意连接语法来构建DQL查询.

鉴于这些类:

A - 没有继承

B1 - 抽象,层次结构的根,鉴别器列被命名为'type'

我设置了一个这样的查询生成器:

$qb->select('a.id AS idA, b.id AS idB')
    ->from('\Entity\A', 'a')
    ->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something');
Run Code Online (Sandbox Code Playgroud)

SQL Doctrine生成的内容如下:

SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3')
Run Code Online (Sandbox Code Playgroud)

问题在于左边连接无用的地方.

有没有办法强制将鉴别器列上的条件放在连接中?至少那会使它......

我应该填写错误报告吗?

php doctrine doctrine-orm

10
推荐指数
1
解决办法
2963
查看次数

Zend Framework 2 - BjyAuthorize总是拒绝访问

我已经设置了bjyoungblood/bjy-authorize模块,但是我正在403为每个URL 收到"访问被拒绝"错误,除了home路由中配置的那个.

module.byjauthorize.global.php看起来如下:

'bjyauthorize' => array(
    'guards' => array(
        'BjyAuthorize\Guard\Controller' => array(
            array('controller' => 'index', 'action' => 'index', 'roles' => array('guest','user')),
            array('controller' => 'index', 'action' => 'stuff', 'roles' => array('user')),
            array('controller' => 'zfcuser', 'roles' => array()),
            //backend
            array('controller' => 'Application\Controller\Index', 'roles' => array('admin')),
            array('controller' => 'MyModule\MyEntity\MyEntity', 'roles' => array('admin')),

        ),

        'BjyAuthorize\Guard\Route' => array(
            array('route' => 'zfcuser', 'roles' => array('user')),
            array('route' => 'zfcuser/logout', 'roles' => array('user')),
            array('route' => 'zfcuser/login', 'roles' => array('guest')),
            array('route' …
Run Code Online (Sandbox Code Playgroud)

zend-framework2 bjyauthorize

9
推荐指数
2
解决办法
5337
查看次数

mysql tinyint(2)映射为boolean与doctrine不正确

我用symfony2和doctrine用命令反向设计我的数据库:

php app/console doctrine:mapping:convert
php app/console doctrine:mapping:import
php app/console doctrine:generate:entities
Run Code Online (Sandbox Code Playgroud)

但我的字段被映射为布尔值而不是tinyint(2).

为什么它映射为布尔值?

doctrine tinyint symfony dbal doctrine-dbal

6
推荐指数
1
解决办法
6132
查看次数

计算Doctrine的iterate()收集结果

拥有QueryBuilder结果

$query = $em->createQuery("SELECT....");
Run Code Online (Sandbox Code Playgroud)

通过iterate()方法获取它们

http://doctrine-orm.readthedocs.org/en/2.0.x/reference/batch-processing.html

$objects = $query->iterate();
Run Code Online (Sandbox Code Playgroud)

我现在能够

foreach ($objects as $object) {
    $object = $object[0];
    //do something..
    $object->getObjectId();
    ...
}
Run Code Online (Sandbox Code Playgroud)

但...

//after the iterate() call, before to foreach
echo sizeof($objects); //or count($objects);
//always "1", even if i have 10000 foreach loops
Run Code Online (Sandbox Code Playgroud)

为什么以及如何修复?

php doctrine doctrine-orm

6
推荐指数
1
解决办法
5364
查看次数

使用zend framework 1.7.4进行文件上传

我正在尝试使用Zend Framework 1.7.4上传文件,但尚未成功.我已经阅读过Akrabat的教程,这很有帮助但是当我在我的项目中使用这些技术时,我无法让它工作.

php zend-framework file-upload zend-form

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

带有连接表的Doctrine 2 ManyToOne

我正在寻找有关如何映射使用联接表的OneToMany / ManyToOne关系的建议。我没有进行映射,并且收到错误消息,未在媒体表中设置article_id。 

class Media
{
    // ...

    /**
     * @ManyToOne(targetEntity="Document", inversedBy="media")
     * @JoinTable(name="articles_x_media", referencedColumnName="id")
     * joinColumns={@JoinColumn(name="media_id", referencedColumnName="id")},
     * inverseJoinColumns={@JoinColumn(name="bid_id", referencedColumnName="id")})
     * )
     */
    protected $document;
}

class Document
{
    // ...

    /**
     * @OneToMany(targetEntity="Media", mappedBy="document"))
     * @JoinTable(name="articles_x_media", referencedColumnName="id")
     * joinColumns={@JoinColumn(name="article_id", referencedColumnName="id")},
     * inverseJoinColumns={@JoinColumn(name="media_id", referencedColumnName="id")}
     * )
     */
    protected $media;
}
Run Code Online (Sandbox Code Playgroud)

doctrine-orm

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