这是我的情况:用户可以评论视频.评论同时属于视频和用户.我的模型看起来像这样:
class Comment extends Eloquent { public function video() { return $this->belongsTo('Video'); } public function user() { return $this->belongsTo('User'); } } class User extends Eloquent { public function comments() { return $this->hasMany('Comment'); } } class Video extends Eloquent { public function comments() { return $this->hasMany('Comment'); } }
我正在尝试插入评论:
$comment = new Comment; $comment->content = 'content'; Auth::user()->comments()->save($comment);
这会从sql引发Integrity约束违规错误,因为它只更新一个外键.以相反的方式(保存到视频)产生相同的结果.如何一次将它添加到两个模型,更新两个外键?
你现在遇到的问题是你懒得加载Auth :: user的注释.
我可以做的一件事是,在Eloquent模型中使用关联方法,请尝试这一点,看看它是否适合您的特定需求.
// Get the video of the comment relation $video = Video::find(Input::get('video_id')) ; // Use the associate method to include // the id of the others model $comment = new Comment; $comment->content = 'content'; $comment->user()->associate(Auth::user()); $comment->video()->associate($video); $comment->save();