向函数添加 ID 以防止出现非空错误

Posted

技术标签:

【中文标题】向函数添加 ID 以防止出现非空错误【英文标题】:Adding ID to function to prevent not null error 【发布时间】:2018-06-21 03:54:43 【问题描述】:

我有一个添加评论的功能:

public function addComment(Request $request)

    $request->validate([
        'body' => 'required',
    ]);

    $entry = new Comment();
    $entry->body = $request->body;
    $entry->save();

    return redirect('/');

我还需要传入电影表 id,在 cmets 表中称为film_id。该字段不能为空。上面没有考虑这个字段,所以我收到以下消息:

SQLSTATE[23000]:违反完整性约束:19 NOT NULL 约束失败:cmets.film_id(SQL:插入“cmets” ("body", "updated_at", "created_at") 值

我尝试通过执行以下变体来传递电影 ID,但没有成功。

public function addComment(Request $request, $id)

    $request->validate([
        'body' => 'required',
        'film_id' => 'required',
    ]);

    $entry = new Comment();
    $film_id = Film::find($id);
    $entry->body = $request->body;
    $entry->film_id = $film_id;
    $entry->save();

    return redirect('/');

评论模型:

class Comment extends Model

    public function film()
    
        return $this->belongsTo(Film::class);

    

电影模型:

class Film extends Model

    public function comments()
    
        return $this->hasMany(Comment::class);
    

【问题讨论】:

您的Comment 模型中是否有$guarded$fillable,它是否指定film_id 是否可填充或受保护?因为好像没有指定。 我刚刚将模型信息添加到问题中。我没有使用过 $guarded 或 $fillable。我对这些不熟悉。这是我想要达到的要求吗? 您必须添加数组,请参见此处:laravel.com/docs/5.5/eloquent - 我喜欢使用 $guarded,然后如果我使用它们,我会保留 'id' 和时间戳。跨度> 你能告诉我们你向服务器发出的请求吗? 【参考方案1】:

你没有传递 id,你传递的是电影对象

public function addComment(Request $request, $id)

   $film = Film::find($id);

   $entry = new Comment();       
   $entry->body = $request->body;
   $entry->film_id = $film->id;

   $entry->save(); //your comment is saved with proper film_id 

public function addComment(Request $request, $id)

   $film = Film::find($id);
   $film->comments()->save(['body'=>$request->body]);


【讨论】:

我将 $id 添加到参数中,然后是前两行,但没有任何反应。没有重定向,没有错误页面,数据库没有变化。 不确定我是否理解 //or bit... 是不是 $entry->save(); 我从函数中删除了 'film_id' => 'required' 以及答案中的代码,然后它就可以工作了。谢谢。 好吧,让我清理一下。

以上是关于向函数添加 ID 以防止出现非空错误的主要内容,如果未能解决你的问题,请参考以下文章

在带有 postgres 数据库的 jbpm 6.5.0Final 中出现错误:“id”列中的空值违反了非空约束

Ruby on Rails:如何使用迁移向现有列添加非空约束?

错误 #2007:参数文本必须为非空

mySQL 约束 (Constraints):非空约束 NOT NULL 约束

IntegrityError:错误:“user_id”列中的空值违反非空约束

错误:关系 xxx 的“id”列中的空值违反非空约束 - Spring Data JPA