Symfony2/Doctrine - 与普通SQL相关的实体抽象

问题描述:

我是Symfony2的新手,并基于现有的传统MySQL模式构建应用程序。我已经熟悉了所有Intro文档(The Book等),但仍需要理解如何正确使用框架的一些更高层次的概念。试图从我通常关于编写SQL查询的方式着手讨论实体的概念。我已经使用CLI为我现有的所有表生成实体。举个例子......已经有一个客户和一个标题实体。标题由'客户'拥有,核心Symfony注释已正确映射它们。Symfony2/Doctrine - 与普通SQL相关的实体抽象

因此,给定一个包含许多列值的titles表,但只有一个titles.client_id ...说我想在ClientsController(clients.yml route:/ clients/{id}/add_title)中创建一个表单动作对于URL中给定的客户端ID,将允许用户输入标题名称,并将其保存为只有titles.name & titles.client_id值的标题中的新记录......非常简单。

我的问题是...在定义这个非常简单的查询(在正常SQL)

INSERT INTO (titles) VALUES (name, client_id) 

我需要为标题另一个实体正好与2个特定值的工作?

OR

什么是在这种情况下,只有标题表(名称& CLIENT_ID)的一个子集来使用实体的一部分特定的资源库......理想的方式?

这里是我的客户控制器操作方法:

//use Entity & Form namespaces for BOTH tables; 

public function addTitleAction(Request $request) 
{ 
    $client_entity = new Clients; 
    $titles_entity = new Titles; 
    // generate simple 2 input form with Form\TitlesType 
    return etc ... 
} 

您可以告诉我还需要弄清楚如何使用Form类的工作,但我在这里的基本问题是如何产生的来自较大实体的简单查询以及如何从另一个实体/表控制器的控制器调用。 Thx为您提供帮助。

+0

你AREN” t应该与控制器内的其他控制器一起工作,您将与对象(实体)一起工作。你不应该调用另一个控制器的方法,你应该调用一个实体(或实体库)的方法。 – skrilled

+0

所以你说这个动作应该在TitlesController中,好的,我明白了。让我试试看。当我处理更复杂的查询时,仍然可以使用更一般的解释。 Thx – shotdsherrif

+0

哦,等等,我看到标题由客户拥有。你可以在教条实体配置中建立关系。如果你使用的是CLI工具,它可能是在src/BundleName/resources/config/doctrine/Entityname.yml中,那么你就像webbiedave在他的回答或$ client-> setTitle($ title)中说的那样。代替 – skrilled

为了将您的头围绕新的概念,将实体想象为从表中返回的行。将存储库视为您在桌面上的查询。所以你应该有一个Title实体(而不是Titles)。

INSERT INTO(职称)VALUES(姓名,CLIENT_ID)

我需要为标题另一个实体正义与那些 2特定值的工作?

你会想创造一个新的纪录(认为新的对象作为一个新的记录,你再保存的)时,创建新的对象,沿着线:

$title = new Title(); 
$title->setClient($client); 
$em->persist($title);