标签: doctrine-odm

Doctrine ODM MongoDB - 使用约束复制一个简单的一对多参考

我是Doctrine,mongo和ODM设置的新手,在ZF1中使用这个设置时,我试图用约束复制一个简单的一个到多个引用.这是情况,并希望就如何实现这一点提出一些建议.

这是一个简单的用户 - >角色映射,所以在sql情况下我会有如下表:

Users
 - id
 - name
 - role_id

Roles
 - id
 - name

然后,将在用户role_id上​​设置外键约束以映射到角色ID.删除角色后,将触发外键约束,停止操作.

我怎样才能在Doctrines MongoDB ODM中实现相同的目标?

到目前为止,我在User实体上使用了不同类型的注释,包括带有不同级联选项的@ReferenceOne @ReferenceMany ...

现在留给我的选择是在'role'实体上实现@PreUpdate,@ PreRemove生命周期事件,然后检查没有用户正在使用该角色,如果它们在更新时更改引用以匹配或删除抛出异常.

我在这里还是迷路了?

谢谢,

php doctrine zend-framework doctrine-orm doctrine-odm

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

Doctrine MongoDB结果缓存

如何缓存Doctrine MongoDB结果呢?查看Configuration的代码,它似乎没有像标准Doctrine那样的内置结果缓存,只有查询缓存.

我曾想过在应用程序中创建自己的缓存层,但返回的对象非常繁重,因为它们包含视图不需要的许多Doctrine逻辑.如何配对对象,使它们实际上只是数据容器?

caching doctrine mongodb doctrine-orm doctrine-odm

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

Doctrine + MongoDB - 如何查询数组非空的文档

我想收到大小大于零的数组"赞"的所有文件.我看到了一个使用 - > size()方法获取特定大小的数组的示例:

$qb = $dm->createQueryBuilder('Article')->field('comments')->size(0);
Run Code Online (Sandbox Code Playgroud)

但是要获得大小不等于零的数组,是否有选项可以做到这一点?

谢谢!

php doctrine-odm

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

带有ids的数组的doctrine2顺序

如何通过带有id的数组使用doctrine2命令?

我有这个问题:

$qb = $this->createQueryBuilder('u')
        ->select('u', 'n', 'c')
        ->leftJoin('u.notifications', 'n')
        ->leftJoin('u.channel', 'c')
        ->andWhere('u.id IN (:ids)')
        ->setParameter('ids', $ids);
Run Code Online (Sandbox Code Playgroud)

我希望结果与带有id的数组具有相同的顺序,是否可以这样做?

谢谢

解:

使用FIELD mysql扩展与https://github.com/beberlei/DoctrineExtensions

:)

谢谢

doctrine-query symfony doctrine-orm doctrine-odm

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

Doctrine Mongodb ODM和DateTime查询

我可以在这个问题上使用一些帮助.我正在使用Symfony2 + mongodb + doctrine创建一个应用程序.我只想使用Doctrine ODM查询过去5分钟内登录过的所有用户.我有一个User集合,其中包含一个名为date_last_login的日期字段.

所以我尝试使用这样的querybuilder:

<?php
// Creating a DateTime object and susbtract 5 min from now
// local time is 15:40:05, timezone: 'Europe/Paris'
$_dateTime = new \DateTime();
$_interval5Min = new \DateInterval('PT5M');
$_dateTime->sub($_interval5Min);

$query = $this->createQueryBuilder('User')
                ->field('date_last_login')->gte($_dateTime)
                ->getQuery();
                ->execute();
Run Code Online (Sandbox Code Playgroud)

当我使用symfony2 profiler查看汇编的查询时,我得到的是:

db.User.find({ "date_last_login": { "$gte": new Date("Fri, 23 Dec 2011 15:30:05 +0100") } });
Run Code Online (Sandbox Code Playgroud)

看起来很好,除了日期提前10分钟而不是5分钟?我只是不明白.如果我转储我的php DateTime对象,日期是正确的:2011-12-23 15:35:05(15:40之前的五分钟).

所以我尝试组装相同的查询而不减少任何分钟,这一次,一切都很好:

<?php
// local time is 15:50:00
$query = $this->createQueryBuilder('User')
            ->field('date_last_login')->gte(new \DateTime())
            ->getQuery();
            ->execute();

// query is ok:
db.User.find({ "date_last_login": { …
Run Code Online (Sandbox Code Playgroud)

php mongodb symfony doctrine-orm doctrine-odm

4
推荐指数
1
解决办法
9590
查看次数

FOSRestBundle和JMS Serializer,在提交JSON时出错

我一直在尝试Symfony 2.2,FOSRest Bundle(使用JMS Serializer)和使用MongoDB的Doctrine ODM.

经过几个小时试图找出如何正确设置FOSRest捆绑包后,我仍然遇到一些麻烦:我有一个非常简单的路线,返回产品和价格列表.每当我请求HTML格式时,我得到正确的响应,但如果我请求任何其他格式(JSON,XML),我会收到错误:

[{"message": "Resources are not supported in serialized data. Path: Monolog\\Handler\\StreamHandler -> Symfony\\Bridge\\Monolog\\Logger -> Doctrine\\Bundle\\MongoDBBundle\\Logger\\Logger -> Doctrine\\Bundle\\MongoDBBundle\\Logger\\AggregateLogger -> Doctrine\\ODM\\MongoDB\\Configuration -> Doctrine\\MongoDB\\Connection -> Doctrine\\ODM\\MongoDB\\LoggableCursor",
    "class": "JMS\\Serializer\\Exception\\RuntimeException",...
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到完整的错误信息

我当前的设置非常简单:我创建了一个到控制器的单一路径,返回产品列表和价格(我按照这个例子来创建产品文档).

这是路线:

rest_product:
    type: rest
    resource: Onema\RestApiBundle\Controller\ProductController
Run Code Online (Sandbox Code Playgroud)

这是控制器:

<?php
namespace Onema\RestApiBundle\Controller;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Routing\ClassResourceInterface;
use FOS\Rest\Util\Codes;
use JMS\Serializer\SerializationContext;
use Onema\RestApiBundle\Document\Product;

class ProductController extends FOSRestController implements ClassResourceInterface
{
    public function getAction()
    {
        $dm = $this->get('doctrine_mongodb')->getManager();
        $products = $dm->getRepository('RestApiBundle:Product')->findAll();

        if(!$products)
        {
            throw …
Run Code Online (Sandbox Code Playgroud)

php mongodb symfony doctrine-odm fosrestbundle

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

Doctrine ODM/PHP/MongoDB - 无法查询引用元素

我有一个具有权限的事件,此权限引用用户.我正在尝试获取与用户相关的所有事件,但我似乎无法按照我的意愿获得教义.

这是我的Mongo架构

Array
(
    [_id] => 4e63903cbc3470a2cd000002
    [date] => 2011-10-09
    [name] => Event1
    [privileges] => Array
        (
            [0] => Array
                (
                    [user] => Array
                        (
                            [$ref] => users
                            [$id] => 4e63611cbc347053a2000001
                            [$db] => eventdb
                        )

                    [role] => admin
                )

        )

    [url] => Event1
)
Run Code Online (Sandbox Code Playgroud)

学说事件实体:

class Event {

    /**
     * @Id
     */
    protected $id;

    /**
     * @String
     */
    protected $name;

    /**
     * @EmbedMany(targetDocument="\Event\Privilege")
     */
    protected $privileges = array();
}
Run Code Online (Sandbox Code Playgroud)

特权实体:

class Privilege {

    /**
     * @ReferenceOne(targetDocument="\User", cascade={"persist"})
     */
    protected $user; …
Run Code Online (Sandbox Code Playgroud)

php mongodb doctrine-orm doctrine-odm

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

如何在Symfony 2服务容器中设置Doctrine MongoDB存储库

如何在Symfony 2应用程序中正确设置服务容器以支持自定义文档存储库?

到目前为止我所拥有的是:

services:
  acme.repository_user:
    class: Acme\Repository\UserRepository
    arguments: [@doctrine.odm.mongodb.document_manager]
Run Code Online (Sandbox Code Playgroud)

但是,当我查看DocumentRepositoryUserRepository继承的类的构造函数时,我可以看到以下参数:

public function __construct(DocumentManager $dm, UnitOfWork $uow, Mapping\ClassMetadata $class)
Run Code Online (Sandbox Code Playgroud)

我似乎注入了文档管理器但是如何注入工作单元和类元数据?

php symfony doctrine-orm doctrine-odm

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

Symfony 4 Voters - 角色和权限问题

我开始使用 Voter System 来保护我的 URL,但我有很多问题。

首先,我不知道我是否必须使用“角色”或“权限”。

“角色”是指 Role_User、Role_Manager 等。“权限”是指“Access_users”、“Edit_User”、“Add_User”等。

我说得对吗?

如果是,如果我没有要控制的对象,我想检查我的选民中的权限以控制对 URL 的访问。

例子

/**
 * @Route("/", name="list")
 * @Security("is_granted('ROLE_ADMIN') or is_granted('PERM_ACCESS_SERIES')")
 */
public function list()
{
    $series = $this->seriesService->findAll();

    return $this->render('backend/series/list.html.twig', [
        "series" => $series
    ]);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想检查用户是否具有角色ROLE_ADMIN或权限PERM_ACCESS_SERIES,但我不知道如何在我的选民中进行。

有关信息,“ROLE_ADMIN”是在我的 security.yaml 配置中设置的,但我想让这些角色动态化,以便能够创建角色(并为角色分配权限?)。

在我的 Voter 类中,当我控制一个 Document 时,我会检查所有者和其他可以管理该 Document 的用户,但是当我不传递一个 Document 时,我真的不知道该怎么做。

只是获取用户的权限并检查请求的权限是否在他们中。类似的东西:

if (in_array($attribute, $user->getPermissions())) {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

其实这是我的选民

 protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
    //ADMIN and SUPER_ADMIN can do anything they want ! …
Run Code Online (Sandbox Code Playgroud)

authorization symfony doctrine-odm symfony4

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

api-platform odm iri 引用不会转换为 json 中的对象

我想创建一个这样的模型。

{
  "id": 7653,
  "name": "Vortl 123",
   "category": [
    {
      "name": "Electronic",
      "url": "electronic",
      "id": 1
    }, {
      "name": "Phone",
      "url": "phone",
      "id": 2
    },
    {
      "name": "Mobile Phone",
      "url": "mobile-phone",
      "id": 3
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用 odm 参考文献创建了文档。代码就是这些。

这是产品类别。

/**
 * @ApiResource
 *
 * @Document
 */
class Product
{

    /**
     * @ODM\Id(strategy="INCREMENT", type="integer")
     */
    private $id;

    /**
     * @ODM\Field(type="string")
     * @Assert\NotBlank
     */
    public $name;

    public function __construct()
    {
        $this->categories = new ArrayCollection();
    }

    /**
     * @ODM\ReferenceMany(targetDocument=Category::class, inversedBy="product", cascade={"persist"}, storeAs="id")
     */ …
Run Code Online (Sandbox Code Playgroud)

php document mongodb doctrine-odm api-platform.com

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