我正在努力理解为什么某些东西会起作用。我有一个用户模型,在其中我声明用户可以有一个项目,例如
public function project()
{
return $this->hasOne('AppProject', 'userId');
}
然后在我的项目模型中,我定义一个用户属于项目
public function user()
{
return $this->belongsTo('AppUser', 'userId');
}
所以按照我的理解,一个用户应该只允许一个项目?因此,在我的Projects控制器中,我有我的存储功能。我不会去看所有的,但我基本上做了以下
$newProject = new Project();
$newProject->projectName = Input::get('projectName');
$newProject->projectValue = Input::get('projectValue');
$newProject->userId = Input::get('user');
$newProject->save();
现在,在我获得输入用户的地方,这总是已登录用户的id。所以说,我登录到系统并创建一个新项目。然后这个项目就有了我的userID。这很好用。
我的问题是,为什么它允许我用相同的ID创建第二个项目?因此,如果我登录到系统,我基本上可以用我的名字创建尽可能多的项目。这难道不违背我的亲属关系的定义吗?根据关系,我应该只被允许创建一个项目。
我真的只是想了解为什么允许这样做?
感谢
在一对一中,
您正在将record
链接到另一个表中的另一个record
。
这意味着,您检查的是single record
,而不是整个表。
所以在你的例子中,正如你所定义的,这是一个正确的One - to - One
关系。
为什么要添加新的多个项目
正如我之前所说,我们正在检查single record
。
如何限制对外键使用UNIQUE
约束
User table
----------
`id` int,
`project_id` UNIQUE,
Project table
----------
`id` int,
`user_id` UNIQUE,
没有唯一约束的示例http://sqlfiddle.com/#!9/f2b07/1/0
(尝试放入相同的值,但无法插入)
具有唯一约束的示例http://sqlfiddle.com/#!9/dda24/1