【问题标题】:In Laravel How to insert related models在 Laravel 中如何插入相关模型
【发布时间】:2017-07-09 19:23:49
【问题描述】:

例如:我有项目模型和需要模型。
因此,当用户创建一个新项目时,他还必须创建它(需要),每个项目可能不止一个。
我在 projectController 的“存储”方法中做到了这一点:-

$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 方式)来做到这一点?

更新:-
projects 表架构:-
id、name、type_id

需要表架构:-
id、project_id、title

types 表架构:-
ID、名称、描述

【问题讨论】:

  • 分享你的数据库
  • 请分享您的模型定义

标签: php laravel orm eloquent query-builder


【解决方案1】:

您需要持久化项目以获取 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 添加到$fillable

Project 模型还必须将关系定义为一对多:

// Project.php

public function needs()
{
    return $this->hasMany(Need::class);
}

【讨论】:

  • 这是我需要确认的,谢谢
【解决方案2】:

你可以按照这个方法。

$needs = [
  [
    'title' => 'A new title.',
  ],
  [
    'title' => 'Another new title.',
  ],
];

$project->needs()->createMany($needs);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-29
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    相关资源
    最近更新 更多