【问题标题】:Not being able to pass values into database from eloquent relationships in laravel 6无法将值从 laravel 6 中雄辩的关系传递到数据库
【发布时间】:2020-02-17 16:59:23
【问题描述】:

我正在开发我的第一个 laravel 项目,这是一个库应用程序。 我现在正在制作一个表格来创建一本书,我必须在这里建立许多雄辩的关系。我创建了书籍的关系语言,这很容易,因为一本书只能有一种语言(在这种情况下),但一种语言可以用于多本书。 我现在面临的问题是,我希望能够在表单上选择流派,所以我将流派表与我的 book 表通过 belongsToMany 关系连接起来,当然我还创建了一个数据透视表。 现在,我认为问题出在我的 BookController 的 store 函数中,但我就是不知道是什么问题。

这是我的一些代码:(对不起,如果我遗漏了什么,这是我第一次在这里提问)

My BookController 的存储功能:

public function store(Request $request)
    {
        $validatedData = $request->validate([
            'title' => 'required|max:255',
            'author_id' => 'required',
            'year' => 'required|numeric',
            'publisher_id' => 'required',
            'genres' => 'exists:genres,id',
            'language_id' => 'required',
            'isbn' => 'required|numeric',
            'pages' => 'required|numeric',
        ]);

        $book = Book::create($validatedData);
        $book->genres()->attach(request('genre_id'));


        return redirect('books')->with('success', 'Book was added!');
    }

如果我现在提交表单,我会收到以下消息:

SQLSTATE[HY000]:一般错误:1364 字段“genre_id”没有默认值(SQL:插入bookstitleauthor_idyearpublisher_id,@987654328 @, isbn, pages, updated_at, created_at) 值(猫的西班牙语,1, 1994, 1, 1, 1234567891128, 2337, 2020-02-17 16:37:07, 2020-02 -17 16:37:07)) 我的 create.blade.php

<div class="form-group">
                <label for="genre_id">Genre(s):</label>
                @foreach($genres as $genre)
                <input type="checkbox" name="genre_id[]" value="{{ $genre->id }}">{{ $genre->name }}
                @endforeach
                </select>
                @error('genre_id')
                <div class="alert alert-danger">{{ $message }}</div>
                @enderror
            </div>

类型的值显示在我的表单中,但我似乎无法将它们输入到我的数据库中。

任何帮助将不胜感激!

【问题讨论】:

  • 请将代码以纯文本形式发布在代码块中。见Markdown help
  • 如果书籍 类型是多对多关系,那么您不应该在 books 表中包含 genre_id 列。检查您的迁移脚本或数据库架构。

标签: mysql laravel eloquent laravel-6


【解决方案1】:

首先从您的示例中,我无法确定您是否打算通过 单个genre 通过请求数据或genres 的数组使用genres 让我相信可能有多个genre 但验证密钥是单数,如果你打算使用genres.*传递genre_id 值的数组。

这是 Laravel 魔术方法的缺点之一,因为您请求 $book-&gt;genres()-&gt;attach(request('genre_id'))request('genre_id') 在您的验证中似乎不存在,您会发现您实际上传递了一个 null 值,就像 @987654330 @ 导致错误。

要解决此问题,您应该将 -&gt;attach() 调用更改为 $book-&gt;genres()-&gt;attach($validatedData['genres']),这将确保您将经过验证的数据传递给 attach 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 2018-11-12
    • 1970-01-01
    • 2015-03-14
    相关资源
    最近更新 更多