在Laravel如何插入相关模型
In Laravel How to insert related models
例如:我有Project模型和Need模型。
因此,当用户创建一个新项目时,他也必须创建它(需要),每个项目可能不止一个。
我在 projectController 的 "store" 方法中这样做了:-
$project = new Project;
$project->name = $request->project_name;
$project->type = $request->project_type;
// ... etc
if ( $request->exists("project_needs") ) {
foreach ( $request->project_needs as $project_need ) {
$need = new Need;
$need->title = $project_need['title'];
$need->project_id = $project->id // Here is the thing
}
}
但它给了我一个错误,因为(我认为)project_id 还没有创建,因为它没有保存到数据库中,那么创建两个模型实例的最佳方法是什么(项目 &需要)并保存他们与他们的关系?
我应该保存项目然后获取 (last-save-id) 吗?或者有更好的(Laravel 方法)来做到这一点?
更新:-
项目 table 架构:-
id, 名字, type_id
需要 table 架构:-
id, project_id, 标题
类型 table 架构:-
编号、名称、描述
您需要持久化项目获取id,才能添加相关需求
$project = new Project;
$project->name = $request->project_name;
$project->type = $request->project_type;
// ... etc
$project->save(); // Saving to database;
if ($request->exists("project_needs")) {
foreach ($request->project_needs as $project_need) {
$project->needs()->create([
'title' => $project_need['title'],
]);
}
}
不要忘记将 title
添加到 Need 模型上的 $fillable
此外,项目模型必须将关系定义为一对多:
// Project.php
public function needs()
{
return $this->hasMany(Need::class);
}
也可以按照这个方法。
$needs = [
[
'title' => 'A new title.',
],
[
'title' => 'Another new title.',
],
];
$project->needs()->createMany($needs);
例如:我有Project模型和Need模型。
因此,当用户创建一个新项目时,他也必须创建它(需要),每个项目可能不止一个。
我在 projectController 的 "store" 方法中这样做了:-
$project = new Project;
$project->name = $request->project_name;
$project->type = $request->project_type;
// ... etc
if ( $request->exists("project_needs") ) {
foreach ( $request->project_needs as $project_need ) {
$need = new Need;
$need->title = $project_need['title'];
$need->project_id = $project->id // Here is the thing
}
}
但它给了我一个错误,因为(我认为)project_id 还没有创建,因为它没有保存到数据库中,那么创建两个模型实例的最佳方法是什么(项目 &需要)并保存他们与他们的关系?
我应该保存项目然后获取 (last-save-id) 吗?或者有更好的(Laravel 方法)来做到这一点?
更新:-
项目 table 架构:-
id, 名字, type_id
需要 table 架构:-
id, project_id, 标题
类型 table 架构:-
编号、名称、描述
您需要持久化项目获取id,才能添加相关需求
$project = new Project;
$project->name = $request->project_name;
$project->type = $request->project_type;
// ... etc
$project->save(); // Saving to database;
if ($request->exists("project_needs")) {
foreach ($request->project_needs as $project_need) {
$project->needs()->create([
'title' => $project_need['title'],
]);
}
}
不要忘记将 title
添加到 Need 模型上的 $fillable
此外,项目模型必须将关系定义为一对多:
// Project.php
public function needs()
{
return $this->hasMany(Need::class);
}
也可以按照这个方法。
$needs = [
[
'title' => 'A new title.',
],
[
'title' => 'Another new title.',
],
];
$project->needs()->createMany($needs);