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