Model view controller 表之间的Symfony关系
我使用symfony 1.4.10 我有下一个情况: 用户可以创建“广告”,他可以创建一个“公司”。我的模式部分:Model view controller 表之间的Symfony关系,model-view-controller,symfony1,symfony-1.4,Model View Controller,Symfony1,Symfony 1.4,我使用symfony 1.4.10 我有下一个情况: 用户可以创建“广告”,他可以创建一个“公司”。我的模式部分: Ads: actAs: Timestampable: ~ Sluggable: unique: true fields: [title] canUpdate: false connection: doctrine tableName: ads columns: ad_id: { type: integer
Ads:
actAs:
Timestampable: ~
Sluggable:
unique: true
fields: [title]
canUpdate: false
connection: doctrine
tableName: ads
columns:
ad_id: { type: integer(4), primary: true, autoincrement: true, notnull: true }
user_id: {type: int(4) }
country: {type: string(255), notnull: true }
category_id: { type: int(4), notnull: true }
company: {type: string(255), notnull: true }
address: {type: string(255), notnull: true }
contact_person: {type: string(255), notnull: true }
phone: { type: string(50), notnull: true }
fax: { type: string(50) }
email: {type: string(255), notnull: true}
show_in_profile: { type: boolean,notnull: true , default: false }
title: {type: string(255), notnull: true }
content: {type: string(), notnull: true }
company: {type: string(255), notnull: true }
AGB: { type: boolean,notnull: true , default: false }
active: { type: boolean,notnull: true , default: 0 }
expires_at: { type: timestamp, notnull: true }
relations:
Owner: { onDelete: CASCADE, local: user_id, foreign: id, class: sfGuardUser }
Bookmark: { local: ad_id, foreign: user_id, class: sfGuardUser, refClass: Bookmarks }
Categories: { onDelete: CASCADE, local: ad_id, foreign: category_id }
Images: { local: ad_id, foreign: ad_id, type: many, class: Images }
Companies:
actAs:
Timestampable: ~
Sluggable:
unique: true
fields: [company]
canUpdate: false
connection: doctrine
tableName: companies
columns:
company_id: { type: integer(4), primary: true, notnull: true, autoincrement: true }
user_id: {type: int(4) }
category_id: {type: int(4), notnull: true }
company: {type: string(255), notnull: true }
address: {type: string(255), notnull: true }
contact_person: {type: string(255), notnull: true }
phone: { type: string(50), notnull: true }
fax: { type: string(50) }
email: {type: string(255), notnull: true}
url: { type: string(50) }
about: {type: string(), notnull: true}
country: {type: string(255), notnull: true}
active: { type: boolean, default: 0 }
has_company: { type: boolean, default: 1 }
relations:
Owner: { onDelete: CASCADE, local: user_id, foreign: id, class: sfGuardUser }
Images_companies: { local: company_id, foreign: company_id, type: many, class: Images_companies }
Categories: { onDelete: CASCADE, local: company_id, foreign: category_id }
sfGuardUserProfile:
connection: doctrine
tableName: sf_guard_user_profile
columns:
id: { type: integer(4), primary: true, autoincrement: true }
user_id: { type: integer(4), notnull: true }
salutation: { type: string(10), notnull: true }
first_name: { type: string(30), notnull: true }
last_name: { type: string(30), notnull: true }
country: { type: string(255), notnull: true }
postcode: { type: string(10) , notnull: true }
city: { type: string(255), notnull: true }
address: { type: string() , notnull: true }
phone: { type: string(50) }
email: { type: string(255), notnull: true }
validate: { type: string(17) }
banned: { type: boolean, default: 0 }
payed_until: { type: datetime, notnull: true}
relations:
User:
class: sfGuardUser
local: user_id
foreign: id
type: one
foreignType: one
foreignAlias: Profile
onDelete: CASCADE
所以我需要在每个广告的用户把链接到该用户的公司。所以我不知道怎么做。。。
部分路由:
ads:
url: /:sf_culture/account/ads/:action/*
param: { module: ads }
requirements:
sf_culture: (?:de|en|ru)
companies:
url: /:sf_culture/account/company/:action/*
param: { module: companies }
requirements:
sf_culture: (?:de|en|ru)
我认为在每个广告中都有可能与一家公司建立链接,但我不知道如何才能获得我所需的公司id。可能会添加“广告”和“公司”之间的关系?可能还有其他方法与公司建立链接?
p、 It’很抱歉,我的英语不好在公司模型中,在
用户id
上放置一个唯一索引
。这样,用户只能创建一个公司
另外,在公司模式中
Owner: { onDelete: CASCADE, local: user_id, foreign: id, class: sfGuardUser, foreignAlias: Company }
现在在代码中,您可以始终执行$user->Company
来获取用户的主要公司
在Ads模型中创建对公司的引用
Company: { onDelete: CASCADE, local: company_id, foreign: id, class: Company, foreignAlias: Ads }
现在,您可以通过$company->Ads
或者对于用户$user->Company->Ads
,这应该很容易!
转到表单,并将其添加到configure()方法
保存表单时,请在操作中处理此问题:
if ($this->form->isValid()) {
$user_id = // get user_id of authenticated user
$user = // get user obj
$company_id = $user->Companies->id;
$temp_ad = $this->form->getObject();
$ad->company_id = $company_id ;
$this->form->save();
}
另外,在你的广告模式中,公司与外国的关系应该是id谢谢!我在Ads模型中建立关系:
公司:{onDelete:CASCADE,local:company\u id,foreign:company\u id,class:companys,foreignAlias:Ads}
和在公司模型中建立关系:{onDelete:CASCADE,local:user\u id,foreign:id,class:sfGuardUser,foreignAlias:companys},当用户填写新的表单时,他可以选择所有的公司,而我不能,用户只能选择他的公司(我是noob)(
if ($this->form->isValid()) {
$user_id = // get user_id of authenticated user
$user = // get user obj
$company_id = $user->Companies->id;
$temp_ad = $this->form->getObject();
$ad->company_id = $company_id ;
$this->form->save();
}