【问题标题】:Laravel: When creating a record with relations, cannot insert foreign key into tableLaravel:创建具有关系的记录时,无法将外键插入表中
【发布时间】:2016-01-22 04:15:11
【问题描述】:

我正在关注 Laravel 5.2 文档中的“中间任务列表”练习,但在理解 this piece of code 的工作原理时遇到了一些困难。

$request->user()->tasks()->create([
    'name' => $request->name,
]);

问题 1

具体来说,我对user()tasks() 方法之间的关系感到困惑。为什么以及如何使user()tasks() 方法可从$request 对象获得?

问题 2

我创建了一个类似的应用程序,并有 PersonCountry 模型。我想从下拉列表中传递country_id 输入,但我无法使用以下代码更新数据库。

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required|max:255',
        'country_id' => 'required|max:3',
    ]);

    $request->user()->people()->create([
        'name' => $request->name,
        'country_id' => $request->country_id,
    ]);

    return redirect('/people');
}

为什么country_id不能保存到表中?我尝试将user() 更改为country(),但错误消息显示“找不到类国家/地区”。但是为什么教程中的 'user()' 可用呢?我很困惑。

【问题讨论】:

  • 如果发出请求的用户经过身份验证,则请求的 user() 方法可用。由于它使用了用户模型,因此它也可以获取相关模型,对于tasks()到工作的任务关系必须在用户模型中定义
  • 感谢@Digitlimit 的回答。我想我现在明白了。关于country_id,让我看看我能不能得到更多的线索..
  • 关于country_id,你需要了解雄辩的关系是如何运作的。检查文档以了解雄辩的模型关系
  • 您还可以确保 country_id 在 People 模型中的 $fillable = [ 'country_id'] 中
  • @Digitlimit 谢谢!这可以解决问题。在询问之前,我应该通读 Eloquent 文档和关系。非常感谢。

标签: forms laravel dropdown


【解决方案1】:

如果发出请求的用户经过身份验证,则可以使用user() 请求方法。

由于它使用User 模型,它还可以获取相关模型。要使tasks() 工作Task 关系必须在用户模型中定义。

对于要创建(大量分配)的country_id,确保其包含在People 模型的$fillable 属性中

$fillable = ['country_id']

请阅读 Laravel 文档中的 Eloquent 模型关系部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2014-11-21
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多