我有一个网站,用户可以发送他们的产品(如汽车,手机,电脑)并在我的网站上在线销售,可能像Ebay和亚马逊。
我有广告表,使用 Mass Assignment
存储有关一件事的所有公开信息,其他类别如移动,汽车和计算机有他们的自己的表,并将在其上存储该类别的专业和其他信息(例如,汽车有一些额外的信息,如颜色,燃料类型,保证,事故,保险)。
现在您知道我有两个表(广告和 ads_mobile ),对于所有表单,我都有一个 adsController
<的控制器/ strong>和 ads
模型,表单将动态创建,每个表单都有自己的输入(例如:Mobile和car有不同的输入和字段),我只发送所有动态表单到adsController@check
,然后我检查它是什么样的形式(是移动?是那个车?)然后我想将这些数据发送到模型:
//adsController(This is just Example);
class User extends Eloquent {
protected $fillable_ads = array('field_one', 'field_two', 'field_three');
//And I want to use fillable_mobile_ads too
protected $fillable_mobile_ads = array('field_one', 'field_two', 'field_three');
}
这可能吗?
模型和控制器应该如何?
对我的程序结构的任何建议?
答案 0 :(得分:0)
Laravel始终将一个模型用于一个表。 我建议重新考虑你的数据库设计。为什么不为广告创建一个表格并在其中放置所有广告(如同一个表格中的移动设备,汽车和计算机),并添加一个列,该列指定了以下类型:
+----+----------+-----------+-----------+-------------+
| ID | type | field_one | field_two | field_three |
+----+----------+-----------+-----------+-------------+
| 1 | Mobile | {data} | {data} | null |
| 2 | Mobile | {data} | {data} | null |
| 3 | Car | null | null | {data} |
| 4 | Mobile | {data} | {data} | null |
| 5 | Computer | {data} | {data} | {data} |
+----+----------+-----------+-----------+-------------+
在此示例中,您在一个表中有3个手机,1个车和1个计算机。现在我们可以说mobile
仅使用第一和第二字段,car
使用字段三,computer
使用所有字段。
现在,您可以在car
表单中提交隐藏字段type=car
和字段3。在您的mobile
表单中提交隐藏字段type=mobile
和字段1和2.依此类推。未提交的字段仍为null
。
我认为不需要多个表格。
答案 1 :(得分:0)
鉴于您的设计描述,我会研究多态关系。当您有多个模型(移动设备,汽车,计算机)共享一组特定于所有模型的信息(广告)时,此功能非常有用。
class Ad extends Eloquent {
protected $fillable = array('ad_field_one', 'ad_field_two');
public function adable() {
return $this->morphTo();
}
}
class Mobile extends Eloquent {
protected $fillable = array('mobile_field_one', 'mobile_field_two');
public function ad() {
return $this->morphOne('Ad', 'adable');
}
}
class Car extends Eloquent {
protected $fillable = array('car_field_one', 'car_field_two');
public function ad() {
return $this->morphOne('Ad', 'adable');
}
}
class Computer extends Eloquent {
protected $fillable = array('computer_field_one', 'computer_field_two');
public function ad() {
return $this->morphOne('Ad', 'adable');
}
}
要支持上述关系,您需要在ads
表中添加两个字段:adable_type
和adable_id
。这可以使用语句$table->morphs('adable');
可以找到有关多态关系的文档here。