缺少一个我无法理解的链接。
我使用迁移来创建数据库表,并在那里定义关系。意思是..如果我有一个人员表和一张工作表,我需要一个人与工作之间的一对多关系,我的工作表中包含一个“person_id”。
当我播种数据或将其添加到我的应用程序中时,我会完成添加记录的所有工作,设置* _id =值等。
但不知怎的,我觉得Laravel有更好的方法。
如果我定义与oneToMany Laravel Eloquent支持的一对多关系:
在我的人物模型中.....
public function jobs()
{
return $this->hasMany('Jobs);
}
在数据库级别上做了什么?如何为此类表创建迁移? Laravel是否在这里自动完成“预期”的事情?喜欢寻找一个乔布斯表,并在那里有一个“person_id”?
答案 0 :(得分:1)
确实支持在迁移蓝图中创建外键关系,这也非常简单。
以下是一个简单的示例迁移,我们定义了一个作业表,其中user_id
列引用了id
表上的users
列。
Schema::create('jobs', function($table)
{
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
});
您还可以使用laravel提供的其他一些方法,例如onDelete()
或onUpdate
当然,为了更好地了解您可以使用的选项,请阅读文档here。
修改:
请记住,Eloquent只是使用流畅的SQL包装器,在幕后只有原始的SQL查询,没有什么神奇的事情发生,流畅的只是让你的生活更轻松,帮助你编写可维护的代码。 看看Query Builder及其工作原理,以及@Martin Charchar所说的Eloquent and relationships。
答案 1 :(得分:1)
是的,Laravel正在做你在上一段中的猜测。
来自the Laravel documentation for Eloquent Relationships(相关段落以粗体显示):
例如,
User
模型可能只有一个Phone
。我们可以定义这个 Eloquent中的关系:class User extends Model { public function phone() { return $this->hasOne('App\Phone'); } }
传递给
hasOne
方法的第一个参数是 相关模型。一旦定义了关系,我们就可以检索它 使用Eloquent的dynamic properties:$phone = User::find(1)->phone;
此语句执行的SQL 将如下:
select * from users where id = 1 select * from phones where user_id = 1
请注意,Eloquent根据模型名称假定关系的外键。在这种情况下,假定
Phone
模型使用user_id
外键。
另请注意,您实际上不必在数据库中显式设置外键索引(只需使用与父键列具有相同数据类型的“外键”列足以使Laravel接受关系)虽然你可能为了数据库完整性而拥有这些索引。