在laravel 5.2中迁移时需要定义外键吗?

时间:2016-07-06 18:05:02

标签: eloquent foreign-keys laravel-5.2

我想创建两个表:数据库中的支持者和票证。在票证表中,我想添加支持者表的id作为外键(在票证表中的supports_id)。但我不会在迁移中定义为外键。我在Laravel官方网站上阅读了雄辩的关系,它说“Eloquent会自动确定正确的外键列,并用_id' 。那么,我是对还是错?

2 个答案:

答案 0 :(得分:0)

我总是这样做

 Schema::create('tickets', function (Blueprint $table) {
            $table->increments('id')->unsigned();
            $table->integer('supporters_id')->unsigned()->index();
            $table->foreign('supporters_id')->references('id')->on('supporters')->onDelete('cascade');
            $table->string('ticket_owner');
            ...
            $table->timestamps();
        });

因此我明确定义$ table-> foreign这一事实让我觉得它是必需的。如果您发现其他证据不需要,请告诉我: - )

答案 1 :(得分:0)

如果未在迁移中定义外键,则数据库在数据库级别上没有任何外键关系。 (并且没有参考完整性等......)。

如果您使用Eloquent查询数据库,则可以使用以下用户模型:

命名空间App;

使用Illuminate \ Database \ Eloquent \ Model;

class User extends Model
{
    /**
     * Get the phone record associated with the user.
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

在存在一对一关系用户的情况下< - >电话。

这里假设电话表有一个名称的列 user_id (modelname +“_”+“id”)用于制作联接。

您可以完全自由地使用自己的命名键约定并使用以下函数:

 public function phone()
 {
    return $this->hasOne('App\Phone','own_key_name');
 }

但同样:只使用Eloquent并不意味着您的数据库表具有任何外键约束。必须在数据库迁移中添加它们。