Laravel 5.6中如何用一个模型对应多张数据表?新手求简明教程
一个Laravel模型操作多张数据表的简明实现
嘿,作为刚从CodeIgniter转Laravel的新手,这种“一个模型管多张表”的需求完全能实现,而且操作逻辑和你熟悉的CI路子很像!我直接给你对应到Laravel的代码示例,一看就懂:
控制器:MyController.php
在Laravel里,我们可以用Request类或者request()助手获取POST数据,调用模型方法的逻辑和CI几乎一致:
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\MyModel; class MyController extends Controller { public function shipBuilding(Request $request) { $data = $request->all(); // 或者用$request->only(['字段1','字段2'])按需获取指定字段 $response = (new MyModel)->shipbuildingSave($data); // 这里可以根据$response做后续处理,比如返回JSON或页面跳转 return response()->json($response); } public function contact(Request $request) { $data = $request->all(); $response = (new MyModel)->contactSave($data); return response()->json($response); } }
模型:MyModel.php
Laravel默认是一个Eloquent模型对应一张表,但我们可以在模型的方法里动态指定数据表,或者直接用DB门面操作不同表,两种实用方式都给你列出来:
方式1:用Eloquent动态切换数据表(推荐,能用到Eloquent的便捷方法)
namespace App\Models; use Illuminate\Database\Eloquent\Model; class MyModel extends Model { // 无需设置默认$table,我们会在方法里动态切换 protected $guarded = []; // 允许所有字段批量赋值(开发环境可用,生产建议精准设置$fillable) public function shipbuildingSave($data) { // 动态切换到shipbuildings表,执行插入操作 return $this->setTable('shipbuildings')->create($data); } public function contactSave($data) { // 切换到contacts表执行插入操作 return $this->setTable('contacts')->create($data); } }
方式2:用DB门面直接操作(和CI的DB操作逻辑更贴近)
如果你更习惯CI里直接操作数据库的感觉,用DB门面也完全没问题:
namespace App\Models; use Illuminate\Support\Facades\DB; class MyModel { public function shipbuildingSave($data) { return DB::table('shipbuildings')->insert($data); } public function contactSave($data) { return DB::table('contacts')->insert($data); } }
小提示
- 如果用Eloquent的
create()方法,记得要么设置$fillable指定允许批量赋值的字段,要么设置$guarded = [](后者更省心但生产环境建议谨慎使用) - 两种方式都可以扩展复杂操作,比如查询、更新、删除,用法和CI的查询构造器逻辑高度相似,上手毫无压力
内容的提问来源于stack exchange,提问作者Bablu Ahmed
相关产品推荐
相关产品推荐

