【发布时间】: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
我创建了一个类似的应用程序,并有 Person 和 Country 模型。我想从下拉列表中传递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 文档和关系。非常感谢。