Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2/Doctrine-与普通SQL相关的实体抽象_Php_Symfony_Orm_Doctrine_Entities - Fatal编程技术网

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

Php Symfony2/Doctrine-与普通SQL相关的实体抽象,php,symfony,orm,doctrine,entities,Php,Symfony,Orm,Doctrine,Entities,我不熟悉Symfony2,并基于现有的遗留MySQL模式构建应用程序。我已经熟悉了所有的介绍文档(书籍等),但仍然需要了解一些更高层次的概念,即如何正确使用框架。试图了解实体的概念,了解我通常如何编写SQL查询。我已经使用CLI为所有现有表生成了实体。例如。。。已经有一个客户端和一个标题实体。标题由客户“拥有”,核心Symfony注释已正确映射它们 因此,给定一个标题表,其中有许多列值,但只有一个titles.client\u id。。。假设我想在ClientsController(client

我不熟悉Symfony2,并基于现有的遗留MySQL模式构建应用程序。我已经熟悉了所有的介绍文档(书籍等),但仍然需要了解一些更高层次的概念,即如何正确使用框架。试图了解实体的概念,了解我通常如何编写SQL查询。我已经使用CLI为所有现有表生成了实体。例如。。。已经有一个客户端和一个标题实体。标题由客户“拥有”,核心Symfony注释已正确映射它们

因此,给定一个标题表,其中有许多列值,但只有一个titles.client\u id。。。假设我想在ClientsController(clients.yml route:/clients/{id}/add_title)中创建一个表单操作,对于url中给定的客户端id,该操作将允许用户输入标题名,并让它将新记录保存到标题中,其中仅包含titles.name和titles.client_id值。。。真的很简单

我的问题是。。。在定义这个非常简单的查询时(在普通SQL中)

我是否需要为标题创建另一个实体来处理这两个特定值

将实体的一部分用于特定存储库的理想方式是什么。。。在这种情况下,是否只是titles表的一个子集(name&client\u 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 ...
}

您可能知道,我还需要弄清楚如何使用表单类,但我这里的基本问题是如何从较大的实体生成简单查询,以及如何从另一个实体/表控制器的控制器调用。谢谢您的帮助。

要了解新概念,请将实体视为从表返回的行。将存储库视为表上的查询。因此,您应该有一个
标题
实体(而不是
标题

插入(标题)值(名称、客户id)

我是否需要为标题创建另一个实体来处理这些标题 2具体值

在创建新记录时,您需要创建一个新对象(将新对象视为一个新记录,然后保存),如下所示:

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

您不应该使用控制器中的其他控制器,而是使用对象(实体)。你不应该调用另一个控制器的方法,你应该调用一个实体(或实体存储库)的方法。所以你说这个动作应该在TitleController中,好吧,我明白了。让我试试。当我处理更复杂的查询时,仍然可以使用更一般的解释。Thxoh,等等,我看到头衔归客户所有。您可以在条令实体配置中设置关系。如果您使用的是CLI工具,它可能位于src/BundleName/resources/config/doctor/Entityname.yml中,那么您只需按照webbiedave在回答中所说的或$client->setTitle($title)即可;相反
$title = new Title();
$title->setClient($client);
$em->persist($title);