Php 如何将请求数据存储到3个不同的表中?

Php 如何将请求数据存储到3个不同的表中?,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个表单,允许经过身份验证的用户创建一个新的会议 此表单将请求用户信息,用户介绍的部分信息应存储在会议表中,一些信息存储在“会议类别”表中,另一些信息存储在“注册类型”表中 因此,当用户提交表单“dd($request->all());”时会显示: 怀疑 我的疑问是如何正确存储此请求信息。因为创建新会议需要将请求数据存储到3个不同的表中: 在“会议”表中需要存储:会议名称、会议描述、会议创建者id、会议创建者名称、会议创建者电子邮件、会议创建者描述 在“会议类别”表中需要存储:会议类别id

我有一个表单,允许经过身份验证的用户创建一个新的会议

此表单将请求用户信息,用户介绍的部分信息应存储在会议表中,一些信息存储在“会议类别”表中,另一些信息存储在“注册类型”表中

因此,当用户提交表单“
dd($request->all());
”时会显示:

怀疑

我的疑问是如何正确存储此请求信息。因为创建新会议需要将请求数据存储到3个不同的表中:

  • 在“会议”表中需要存储:会议名称、会议描述、会议创建者id、会议创建者名称、会议创建者电子邮件、会议创建者描述

  • 在“会议类别”表中需要存储:会议类别id和会议id

  • 在“注册类型”表中需要存储:注册类型名称、注册类型描述和注册类型容量

我有一个ConferenceController,我有在ConferenceController的store()方法中创建新会议的逻辑。但现在我只需要在会议桌上存储请求信息

您是否知道如何将用户介绍的类别和注册类型存储在相应的表中(conference_category和RegistrationType)

ConferenceController创建方法:

<?php

namespace App\Http\Controllers;

use App\Category;
use App\Conference;
use Illuminate\Http\Request;

class ConferenceController extends Controller
{
        public function store(Request $request)
    {
        dd($request->all());

        $this->validate($request, [
            'conference_name' => 'required|max:255',
            'conference_categories' => 'required|array|between:1,3',
            'conference_startDate' => 'required',

            'conference_creator_name' => 'required',
            'conference_creator_email' => 'required|email|unique:users',
            'conference_creator_description' => '',

            'conference_registration_type_name' => 'required',
            'confenrece_registration_type_description' => '',
            'conference_registration_type_capacity' => 'required',

        ]);
        $conference = Conference::create([
            'name' => $request->conference_name,
            'description' => $request->conference_description,
            'startDate' => $request->conference_startDate,

            'conference_creator_id' => Auth::user()->id,
            'conference_creator_name' => $request->conference_creator_name,
            'conference_creator_email' => $request->conference_creator_email,
            'conference_creator_description' => $request->conference_creator_description
        ]);
    }
}
class Category extends Model
{
    public function conferences(){
        return $this->belongsToMany('App\Conference');
    }
}
class RegistrationType extends Model
{
    public function conference(){
        return $this->belongsTo('App\Conference');
    }
}
class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password'
    ];
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function conferences(){
        return $this->hasMany('App\Conference');
    }
}
类别模型:

<?php

namespace App\Http\Controllers;

use App\Category;
use App\Conference;
use Illuminate\Http\Request;

class ConferenceController extends Controller
{
        public function store(Request $request)
    {
        dd($request->all());

        $this->validate($request, [
            'conference_name' => 'required|max:255',
            'conference_categories' => 'required|array|between:1,3',
            'conference_startDate' => 'required',

            'conference_creator_name' => 'required',
            'conference_creator_email' => 'required|email|unique:users',
            'conference_creator_description' => '',

            'conference_registration_type_name' => 'required',
            'confenrece_registration_type_description' => '',
            'conference_registration_type_capacity' => 'required',

        ]);
        $conference = Conference::create([
            'name' => $request->conference_name,
            'description' => $request->conference_description,
            'startDate' => $request->conference_startDate,

            'conference_creator_id' => Auth::user()->id,
            'conference_creator_name' => $request->conference_creator_name,
            'conference_creator_email' => $request->conference_creator_email,
            'conference_creator_description' => $request->conference_creator_description
        ]);
    }
}
class Category extends Model
{
    public function conferences(){
        return $this->belongsToMany('App\Conference');
    }
}
class RegistrationType extends Model
{
    public function conference(){
        return $this->belongsTo('App\Conference');
    }
}
class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password'
    ];
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function conferences(){
        return $this->hasMany('App\Conference');
    }
}
注册类型型号:

<?php

namespace App\Http\Controllers;

use App\Category;
use App\Conference;
use Illuminate\Http\Request;

class ConferenceController extends Controller
{
        public function store(Request $request)
    {
        dd($request->all());

        $this->validate($request, [
            'conference_name' => 'required|max:255',
            'conference_categories' => 'required|array|between:1,3',
            'conference_startDate' => 'required',

            'conference_creator_name' => 'required',
            'conference_creator_email' => 'required|email|unique:users',
            'conference_creator_description' => '',

            'conference_registration_type_name' => 'required',
            'confenrece_registration_type_description' => '',
            'conference_registration_type_capacity' => 'required',

        ]);
        $conference = Conference::create([
            'name' => $request->conference_name,
            'description' => $request->conference_description,
            'startDate' => $request->conference_startDate,

            'conference_creator_id' => Auth::user()->id,
            'conference_creator_name' => $request->conference_creator_name,
            'conference_creator_email' => $request->conference_creator_email,
            'conference_creator_description' => $request->conference_creator_description
        ]);
    }
}
class Category extends Model
{
    public function conferences(){
        return $this->belongsToMany('App\Conference');
    }
}
class RegistrationType extends Model
{
    public function conference(){
        return $this->belongsTo('App\Conference');
    }
}
class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password'
    ];
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function conferences(){
        return $this->hasMany('App\Conference');
    }
}
用户型号:

<?php

namespace App\Http\Controllers;

use App\Category;
use App\Conference;
use Illuminate\Http\Request;

class ConferenceController extends Controller
{
        public function store(Request $request)
    {
        dd($request->all());

        $this->validate($request, [
            'conference_name' => 'required|max:255',
            'conference_categories' => 'required|array|between:1,3',
            'conference_startDate' => 'required',

            'conference_creator_name' => 'required',
            'conference_creator_email' => 'required|email|unique:users',
            'conference_creator_description' => '',

            'conference_registration_type_name' => 'required',
            'confenrece_registration_type_description' => '',
            'conference_registration_type_capacity' => 'required',

        ]);
        $conference = Conference::create([
            'name' => $request->conference_name,
            'description' => $request->conference_description,
            'startDate' => $request->conference_startDate,

            'conference_creator_id' => Auth::user()->id,
            'conference_creator_name' => $request->conference_creator_name,
            'conference_creator_email' => $request->conference_creator_email,
            'conference_creator_description' => $request->conference_creator_description
        ]);
    }
}
class Category extends Model
{
    public function conferences(){
        return $this->belongsToMany('App\Conference');
    }
}
class RegistrationType extends Model
{
    public function conference(){
        return $this->belongsTo('App\Conference');
    }
}
class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password'
    ];
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function conferences(){
        return $this->hasMany('App\Conference');
    }
}

对于需要多对多关系的类别。因为一个会议可以有许多类别,一个类别可以有许多会议。您已经在模型中正确设置了此选项

创建会议后,可以使用Attach方法将类别添加到会议中(假设给定ID确实存在,如果不存在,则必须首先检查):

有关附加的详细信息,请参见:


对于RegistrationType,我从您的模型中假设一个会议可以有多个RegistrationType,而一个RegistrationType只能有一个会议

您必须将以下$fillables添加到您的RegistrationType模型中:

protected $fillable = ['name', 'description', 'capacity', 'conference_id'];
创建会议后,可以创建注册类型:

RegistrationType::create([
    'conference_id' => $conference->id,
    'name' => $request->conference_registration_type_name,
    'description' => $request->confenrece_registration_type_description,
    'capacity' => $request->conference_registration_type_capacity
]);

最终结果:

$conference = Conference::create([
    'name' => $request->conference_name,
    'description' => $request->conference_description,
    'startDate' => $request->conference_startDate,

    'conference_creator_id' => Auth::user()->id,
    'conference_creator_name' => $request->conference_creator_name,
    'conference_creator_email' => $request->conference_creator_email,
    'conference_creator_description' => $request->conference_creator_description
]);

$conference->categories()->attach($request->conference_categories);

RegistrationType::create([
    'conference_id' => $conference->id,
    'name' => $request->conference_registration_type_name,
    'description' => $request->confenrece_registration_type_description,
    'capacity' => $request->conference_registration_type_capacity
]);