如何对某些表只使用一个模型?

how to using just one model for some tables?

我有一个网站,用户可以发送他们的产品(如汽车、手机、电脑)并在我的网站上在线销售,可能是像 Ebay 和亚马逊这样的网站。

我有 ads table 使用 Mass Assignment[=37= 存储关于一件事的所有 public 信息],以及其他类别,如手机、汽车和计算机 都有自己的 table,并将在其上存储该类别的专业信息和附加信息 (例如汽车有一些附加信息,如颜色、燃料类型、担保、事故、保险)

如您所知,我有两个 table(adsads_mobile),对于所有形式我有一个控制器是 adsControllerads 模型,表单将动态创建并且每个表单都有它的自己的输入(对于 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_typeadable_id。这可以在迁移中使用语句 $table->morphs('adable');

完成

可以找到关于多态关系的文档 here