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

时间:2015-05-21 06:07:26

标签: php laravel laravel-4 mass-assignment

我有一个网站,用户可以发送他们的产品(如汽车,手机,电脑)并在我的网站上在线销售,可能像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');

}

这可能吗?

模型和控制器应该如何?

对我的程序结构的任何建议?

2 个答案:

答案 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_typeadable_id。这可以使用语句$table->morphs('adable');

在迁移中完成

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