laravel - Laravel OOP 与继承
问题描述
我正在开发一个 Laravel 应用程序来管理啤酒物品的集合,例如眼镜和瓶子。我目前有一张名为 beeritems 的桌子,每件物品都可以是玻璃或瓶子
Schema::create('beeritems', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id');
$table->unsignedInteger('category_id');
$table->string('item_type');
$table->string('item_name');
$table->text('item_description');
$table->timestamps();
});
我有一个名为“BeerItem”的模型。一个玻璃杯或一个瓶子有很多属性(例如名称、描述),但有些是不同的。然而,为简单起见,我将眼镜和瓶子都存储到 beeritems 表中(一些属性将是空的。我知道这不符合数据库规范化标准,但有一些原因)。
为了能够处理不同的属性,我正在执行以下操作:
Route::post('beerglasses/store','BeerglassController@storeBeerglass')->name('beerglasses.store');
Route::post('beerbottles/store','BeerbottleController@storeBeerbottle')->name('beerglasses.store');
这个想法是,在每个控制器中,我可以验证所需的属性并使用正确的“item_type”将对象存储在“Beeritem”表中。由于“瓶子”和“玻璃”之间的属性可能有很大不同
从一个角度来看:
public function create(Request $request) {
//stuff omitted for clarity
return view('beeritems.create', compact('name'));
}
然后,在视图中,我根据类型根据类型进行区分。有些属性不需要显示。
@switch( strtolower($name) )
@case('beerglasses')
@include('beeritems.create.beerglass')
@break
@case('beerbottles')
@include('beeritems.create.beerbottle')
@break
@endswitch
这一切都有效,但感觉不对,因为每个控制器中有很多类似的代码。本质上,每个控制器中的 store 方法几乎是相同的(只是在某些属性上有所不同)。
有人可以提示我一些更好的解决方案(使用 Laravel)保持一个 Beeritem 表吗?
解决方案
推荐阅读
- javascript - 动态创建没有字符串的引用
- curl - 从 Hive 或 Webhdfs 运行 Impala Refresh
- r - as.H2O 无法确定文件类型错误
- javascript - JavaScript 输入多重验证
- angularjs - ng-file-upload:将数组发送到 Web Api
- r - 在R中计算加权分组平均值的快速方法?
- postgresql - postgres 函数返回一个整数而不是数字
- c# - DispatcherTimer 在 uwp 应用程序中不起作用
- android - Android AGPBI: {"kind":"error","text":"程序类型已经存在:android.support.constraint.BuildConfig","sources":[{}],"tool":"D8"}
- c# - 如何从 Serilog 中排除特定的异常类型?