Laravel 5.3 用数组保存相关模型
Laravel 5.3 Save related model with array
我有一个用户模型和一个事件模型。
一个用户可以have/create很多事件
一个事件属于用户。
我做了这个表格只是为了演示:
我在 dd($request);
时得到了这个输出
如何将此保存在我的数据库 table 事件中。
这些数组字段有问题...我需要制作一些新的 table 除了用户和事件吗??
是的,看来您需要另一个 table。我只是对 table 名称进行了有根据的猜测,因为我不是 100% 确定这些时间和职业指的是什么,看起来你已经有一个 table 存储职业,但是在这里是我能看到的关系:
A user can have many events
An event belongs to a user
An event has many timeslots
A timeslot belongs to an event
A profession has many timeslots
A timeslot has many professions
因此,您的活动和职业(如果您将其命名为其他名称,请不要担心)table 应该如下所示:
events(id, user_id, name, start, end);
professions(id, profession,..);
并且你需要额外添加一个table:
time_slots(id, event_id, profession_id, amount, from, to, hours)
然后在您的模型中设置这些关系。
编辑
创建存储方法的基本方法是使用如下关系:
public function store(Request $request){
// Get the request as an array
$request = $request->all();
// create a new event
$event = Event::create($request);
// Map timeslots to an array of Timeslot objects:
$timeslots = array_map(function($personalId, $amount, $from, $to, $hours) {
return new App\Timeslot($personalId, $amount, $from, $to, $hours);
}, $request['personal_id'], $request['amount'], $request['from'], $request['to'], $request['hours']);
// Save all timeslots for the event
$event->timeslots()->saveMany($timeslots)
}
我还没有尝试过该代码,但它应该为您指明了正确的方向。您应该查看 laravel 关系以了解其工作原理:
https://laravel.com/docs/5.3/eloquent-relationships#the-save-method
我有一个用户模型和一个事件模型。
一个用户可以have/create很多事件
一个事件属于用户。
我做了这个表格只是为了演示:
我在 dd($request);
时得到了这个输出如何将此保存在我的数据库 table 事件中。 这些数组字段有问题...我需要制作一些新的 table 除了用户和事件吗??
是的,看来您需要另一个 table。我只是对 table 名称进行了有根据的猜测,因为我不是 100% 确定这些时间和职业指的是什么,看起来你已经有一个 table 存储职业,但是在这里是我能看到的关系:
A user can have many events
An event belongs to a user
An event has many timeslots
A timeslot belongs to an event
A profession has many timeslots
A timeslot has many professions
因此,您的活动和职业(如果您将其命名为其他名称,请不要担心)table 应该如下所示:
events(id, user_id, name, start, end);
professions(id, profession,..);
并且你需要额外添加一个table:
time_slots(id, event_id, profession_id, amount, from, to, hours)
然后在您的模型中设置这些关系。
编辑
创建存储方法的基本方法是使用如下关系:
public function store(Request $request){
// Get the request as an array
$request = $request->all();
// create a new event
$event = Event::create($request);
// Map timeslots to an array of Timeslot objects:
$timeslots = array_map(function($personalId, $amount, $from, $to, $hours) {
return new App\Timeslot($personalId, $amount, $from, $to, $hours);
}, $request['personal_id'], $request['amount'], $request['from'], $request['to'], $request['hours']);
// Save all timeslots for the event
$event->timeslots()->saveMany($timeslots)
}
我还没有尝试过该代码,但它应该为您指明了正确的方向。您应该查看 laravel 关系以了解其工作原理:
https://laravel.com/docs/5.3/eloquent-relationships#the-save-method