2013-12-11 75 views
0

我是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

回答

0

爲了將您的頭圍繞新的概念,將實體想象爲從表中返回的行。將存儲庫視爲您在桌面上的查詢。所以你應該有一個Title實體(而不是Titles)。

INSERT INTO(職稱)VALUES(姓名,CLIENT_ID)

我需要爲標題另一個實體正義與那些 2特定值的工作?

你會想創造一個新的紀錄(認爲新的對象作爲一個新的記錄,你再保存的)時,創建新的對象,沿着線:

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