首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >foreignId()和unsignedBigInteger()之间的差异

foreignId()和unsignedBigInteger()之间的差异
EN

Stack Overflow用户
提问于 2020-04-02 23:39:09
回答 4查看 19.2K关注 0票数 9

新来的拉勒维尔

链接表时,foreignId()和unsignedBigInteger()有什么区别?

代码语言:javascript
运行
复制
$table->unsignedBigInteger('user_id');
$table->foreignId('user_id');

我都试过了,他们都成功了。

根据文档的说法:

foreignId方法是unsignedBigInteger的别名

但是别名是什么意思呢?这是否意味着他们是一样的?

PS:我没有在文档中使用代码,而是只使用

代码语言:javascript
运行
复制
$table->unsignedBigInteger('user_id');

和/或

代码语言:javascript
运行
复制
$table->foreignId('user_id');
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-04-02 23:44:38

如果您查看一下Blueprint.php,您将看到这两种方法:

代码语言:javascript
运行
复制
 /**
 * Create a new unsigned big integer (8-byte) column on the table.
 *
 * @param  string  $column
 * @param  bool  $autoIncrement
 * @return \Illuminate\Database\Schema\ColumnDefinition
 */
public function unsignedBigInteger($column, $autoIncrement = false)
{
    return $this->bigInteger($column, $autoIncrement, true);
}

/**
 * Create a new unsigned big integer (8-byte) column on the table.
 *
 * @param  string  $column
 * @return \Illuminate\Database\Schema\ForeignIdColumnDefinition
 */
public function foreignId($column)
{
    $this->columns[] = $column = new ForeignIdColumnDefinition($this, [
        'type' => 'bigInteger',
        'name' => $column,
        'autoIncrement' => false,
        'unsigned' => true,
    ]);

    return $column;
}

因此,默认情况下,它使用"bigInteger“列的类型,并将"unsigned”设置为true。最后,他们是一样的。

唯一的区别是使用"unsignedBigInteger“,您可以控制$autoIncrement设置为true还是false,而不是使用foreignId。

票数 16
EN

Stack Overflow用户

发布于 2020-04-02 23:47:05

直到Laravel 6,我们必须定义外键约束,例如

代码语言:javascript
运行
复制
Schema::table('posts', function (Blueprint $table) {
    $table->unsignedBigInteger('user_id');

    $table->foreign('user_id')->references('id')->on('users');
});

这是Laravel 7的语法

代码语言:javascript
运行
复制
Schema::table('posts', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained();
});
票数 15
EN

Stack Overflow用户

发布于 2020-04-02 23:41:48

是的别名意味着是一样的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61002912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档