Laravel:如何在多个表上插入数据
不知道以哪种方式执行此操作更好。具有两个表Laravel:如何在多个表上插入数据,laravel,laravel-5.5,Laravel,Laravel 5.5,不知道以哪种方式执行此操作更好。具有两个表查询\u master和查询\u plan。已定义关系 迁移文件: >> INQUIRY_MASTER public function up() { Schema::create('inquiry_master', function (Blueprint $table) { $table->increments('id'); $table->dateTime('created_date_ti
查询\u master
和查询\u plan
。已定义关系
迁移文件:
>> INQUIRY_MASTER
public function up()
{
Schema::create('inquiry_master', function (Blueprint $table) {
$table->increments('id');
$table->dateTime('created_date_time')->nullable();
$table->unsignedInteger('user_id')->nullable();
$table->string('stitch_video_path')->nullable();
$table->enum('completion_status',['Complete','Pending']);
$table->foreign('user_id')->references('id')->on('users');
});
}
>> INQUIRY_PLAN
public function up()
{
Schema::create('inquiry_plan', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('inquiry_id');
$table->string('title_vacation');
$table->string('email');
$table->string('phone_no', 20)->nullable();
$table->dateTime('start_date')->nullable();
$table->dateTime('end_date')->nullable();
$table->foreign('inquiry_id')->references('id')->on('inquiry_master');
});
}
当前定义一个函数,仅在查询计划
表中插入数据。
在我的控制器上定义的函数
控制器代码:
public function addactivity(Request $request) {
$validator = Validator::make($request->all(), Inquiryplan::planRules(), Inquiryplan::PlanMessages());
if ($validator->fails()) {
return back()->with('error', "Unable to send contact request.!!")->withInput()->withErrors($validator);
}
$plandetails = Inquiryplan::SaveOrUpdate($request);
if($plandetails !== false) {
return redirect()->route('plan')->with('success', trans('Plan details added successfully.!!'));
} else {
return back()->with('error', "Unable to save plan details.!!")->withInput();
}
}
最后在我的模型查询计划模型上保存函数
型号代码:
<?php
namespace App;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Input;
class Inquiryplan extends Model
{
protected $table = 'inquiry_plan';
protected $fillable = [
'inquiry_id',
'title_vacation',
'email',
'phone_no',
'start_date',
'end_date'
];
public $timestamps = false;
public static function SaveOrUpdate(Request $request) {
try {
$id = $request->get('id', false);
$plandetails = false;
DB::transaction(function () use ($request, &$plandetails, $id) {
$plandetails = $id ? Inquiryplan::findOrFail($id) : new Inquiryplan();
$plandetails->fill($request->all());
try {
$plandetails->save();
} catch (\Exception $ex) {
throw $ex;
}
});
return $plandetails;
} catch (\Exception $ex) {
throw $ex;
}
}}
有几件事。首先,Laravel已经在大多数(如果不是全部的话)功能中内置了异常处理程序,所以提供自己的异常是多余的。一个很好的经验法则是——如果您预期会出现错误,那么就不需要使用豁免。因此,您可以显著地重构此代码。对于附加数据库条目,只需将其插入查询计划表逻辑之前:
public static function SaveOrUpdate(Request $request) {
$id = $request->get('id', false);
$plandetails = false;
DB::transaction(function () use ($request, &$plandetails, $id) {
$planDetails = $id ? Inquiryplan::findOrFail($id) : new Inquiryplan();
//plan_master
$inquiryMaster = ...
//plan_details
$planDetails->fill($request->all());
$planDetails->save();
});
return $planDetails;
}}
希望这有帮助
另一方面,我建议将创建和更新任务拆分为不同的控制器方法…使代码更干净,并有助于维护