如何对某些表只使用一个模型?
how to using just one model for some tables?
我有一个网站,用户可以发送他们的产品(如汽车、手机、电脑)并在我的网站上在线销售,可能是像 Ebay 和亚马逊这样的网站。
我有 ads table 使用 Mass Assignment
[=37= 存储关于一件事的所有 public 信息],以及其他类别,如手机、汽车和计算机 都有自己的 table,并将在其上存储该类别的专业信息和附加信息 (例如汽车有一些附加信息,如颜色、燃料类型、担保、事故、保险)。
如您所知,我有两个 table(ads 和 ads_mobile),对于所有形式我有一个控制器是 adsController
和 ads
模型,表单将动态创建并且每个表单都有它的自己的输入(对于 Example:Mobile 和 car 有不同的输入和字段),我只是将所有动态表单发送到 adsController@check
然后我检查它是什么类型的表单(是 Mobile 吗?是 Car 吗? ) 然后我想将此数据发送到模型:
//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');
}
这可能吗?
模型和控制器应该如何?
对我的程序结构有什么建议吗?
Laravel 始终对 one table 使用 one 模型。
我建议重新考虑您的数据库设计。为什么不为广告创建一个 table 并将 所有 广告放在那里(例如手机、汽车和计算机都放在一个 table 中)并添加一列它指定了哪种类型:
+----+----------+-----------+-----------+-------------+
| 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} |
+----+----------+-----------+-----------+-------------+
在此示例中,您在 table 中有 3 部手机、1 辆汽车和 1 台计算机。现在假设 mobile
只使用字段一和字段二,car
使用字段三,而 computer
使用所有字段。
现在从您的 car
表单提交一个隐藏字段 type=car
和仅字段 3。从您的 mobile
表单提交一个隐藏字段 type=mobile
以及字段 1 和 2。依此类推。未提交的字段仍然是 null
.
我认为不需要超过一个 table。
鉴于您的设计描述,我将研究多态关系。当您有多个模型(手机、汽车、计算机)共享所有模型通用的一组特定信息(广告)时,这很有用。
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
table 添加两个字段:adable_type
和 adable_id
。这可以在迁移中使用语句 $table->morphs('adable');
完成
可以找到关于多态关系的文档 here。
我有一个网站,用户可以发送他们的产品(如汽车、手机、电脑)并在我的网站上在线销售,可能是像 Ebay 和亚马逊这样的网站。
我有 ads table 使用 Mass Assignment
[=37= 存储关于一件事的所有 public 信息],以及其他类别,如手机、汽车和计算机 都有自己的 table,并将在其上存储该类别的专业信息和附加信息 (例如汽车有一些附加信息,如颜色、燃料类型、担保、事故、保险)。
如您所知,我有两个 table(ads 和 ads_mobile),对于所有形式我有一个控制器是 adsController
和 ads
模型,表单将动态创建并且每个表单都有它的自己的输入(对于 Example:Mobile 和 car 有不同的输入和字段),我只是将所有动态表单发送到 adsController@check
然后我检查它是什么类型的表单(是 Mobile 吗?是 Car 吗? ) 然后我想将此数据发送到模型:
//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');
}
这可能吗?
模型和控制器应该如何?
对我的程序结构有什么建议吗?
Laravel 始终对 one table 使用 one 模型。 我建议重新考虑您的数据库设计。为什么不为广告创建一个 table 并将 所有 广告放在那里(例如手机、汽车和计算机都放在一个 table 中)并添加一列它指定了哪种类型:
+----+----------+-----------+-----------+-------------+
| 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} |
+----+----------+-----------+-----------+-------------+
在此示例中,您在 table 中有 3 部手机、1 辆汽车和 1 台计算机。现在假设 mobile
只使用字段一和字段二,car
使用字段三,而 computer
使用所有字段。
现在从您的 car
表单提交一个隐藏字段 type=car
和仅字段 3。从您的 mobile
表单提交一个隐藏字段 type=mobile
以及字段 1 和 2。依此类推。未提交的字段仍然是 null
.
我认为不需要超过一个 table。
鉴于您的设计描述,我将研究多态关系。当您有多个模型(手机、汽车、计算机)共享所有模型通用的一组特定信息(广告)时,这很有用。
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
table 添加两个字段:adable_type
和 adable_id
。这可以在迁移中使用语句 $table->morphs('adable');
可以找到关于多态关系的文档 here。