【问题标题】:Laravel : How can i insert data on multiple tablesLaravel:如何在多个表上插入数据
【发布时间】:2018-02-06 12:26:02
【问题描述】:

不知道哪种方式更好执行此操作。有两个表inquiry_masterinquiry_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');
    });
}

当前定义了一个仅在inquiry_plantable 上插入数据的函数。 在我的控制器上定义的函数。

控制器代码:

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();
        }
}

最后在我的模型inquiryplan模型上保存功能。

型号代码:

<?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;
    }
}}

inquiry_plan 表上保存数据之前,一个条目应该转到inquiry_master 表。我该怎么做?

【问题讨论】:

    标签: laravel laravel-5.5


    【解决方案1】:

    几件事。首先,Laravel 已经在大多数(如果不是全部)功能中内置了异常处理程序,因此为您提供自己的异常是多余的。一个好的经验法则是 - 如果您预计会出现错误,则不应使用豁免。因此,您可以显着重构此代码。至于额外的数据库条目,只需将其插入您的inquiry_plan表逻辑之前:

    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;
    }}
    

    希望这会有所帮助!

    顺便说一句,我建议将创建和更新任务拆分为不同的控制器方法...使代码更简洁并有助于以后的可维护性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      相关资源
      最近更新 更多