向函数添加 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:如何使用迁移向现有列添加非空约束?
mySQL 约束 (Constraints):非空约束 NOT NULL 约束