使用CRUD的教义/ symfony中的树

时间:2015-10-26 20:18:28

标签: symfony doctrine-orm

主要任务是拥有一个可以连接到另一个实体的实体。 我已经有一个名为" Dossier"在这一个中,我喜欢有一个像邮件一样的树状结构。

  • 你会以这种方式存储对话吗?
  • 如何使用Doctrine实现树?
  • Symfony可以为它生成CRUD吗?

1 个答案:

答案 0 :(得分:0)

是的,你可以这样做。

我喜欢生成注释风格,YAML作为个人的第二选择。您将如何生成实体映射?我相信XML是你的另一种选择。

你的要求似乎是,你能有关系,是的,你可以。您可以使用FK或Foriegn Keys。你有没看过MySQL,或者你有什么兴趣?

如果您不确定如何设计架构,那么有一个名为MySQL Workbench的MySQL程序。你熟悉吗?您可以使用它来生成简单的FK表关系,然后生成实体将遵循此关系。每次重新调整架构时重新生成。我认为架构中的逆向工程实体是最好的方法。

如果你采用这种方法,一旦你设计了DB Schema,建立了表,如果空是无关紧要的,你可以用这种方式对你的实体进行逆向工程。 see this url here

//import orm mapping information from database, and using a filter for a specific table if you wanted
php app/console doctrine:mapping:import --force YourBundle yml --filter Table1

//convert mapping information, only if you didnt use YML in the top command.
//we need to force this, make sure you dont need any changes on the entity page (normally this is left default_, otherwise back it up first.
php app/console doctrine:mapping:convert annotation ./src --force --filter Table1

立即生成实体

$php app/console doctrine:generate:entities YourBundle

// or generate an entity from scratch
$ php app/console doctrine:generate:entity

为任何新属性生成你的getter和setter,不要触摸你的方法,安全。

$ php app/console doctrine:generate:entities Acme/YourBundle/Entity/Table1
$ php app/console doctrine:schema:update --force or --dump-sql

这将延续Foriegn Relationships。当你使用Doctrine来访问你的数据时,你可以使用关系来查询你认为合适的方式......我试着在这个问题上得到一个很好的例子,我确实有一个例子,但这只是一个例子。

/**
 * getfruitSubtextures()
 * @Route("/fruit/subtextures/color/{color}/size/{size}/texture/{texture}", name="get_fruit_subtextures", options={"expose"=true})
 * @param $color
 * @param $size
 * @param $texture
 * @Method("GET")
 */
public function getfruitSubtextures($color, $size, $texture){

    $em = $this->getDoctrine()->getManager();
    $rsm = new ResultSetfruitpingBuilder($em);
    $rsm->addRootEntityFromClassMetadata('WeRuS\fruitBundle\Entity\Opttextures', 'g');

    $sql = "SELECT SubtextureLabel, textureSubtexture
            FROM opt_textures
            WHERE texturelabel = :texturelabel
            AND color = :color
            AND size = :size
            ORDER BY SubtextureLabel ASC";

    $query = $em->createNativeQuery($sql,$rsm);

    $query->setParameters(array(
        'color' => $color,
        'size' => $size,
        'texturelabel' => $texture,
    ));

    $results = $query->getArrayResult();

    if (!$results)
    {
        throw $this->createNotFoundException('No Matching subtextures found for this fruit size texture!');
    }
    else
    {
        $response = new JsonResponse();
        $response->setData($results);
        return $response;
    }
}

为此制作CRUD,等到您的架构和实体处于正常工作状态,然后按照this procedure

进行操作
$ php app/console generate:doctrine:crud --entity=YourBundle:Table1  --with-write --format=annotation  --overwrite

编辑,我认为用户正在寻找树状结构的例子,而不是树,本文主要提供如何在没有树的情况下做到这一点。哎呀。