【问题标题】:Name of primary key column is always id when using Laravel 5.3?使用 Laravel 5.3 时,主键列的名称总是 id?
【发布时间】:2026-01-20 08:45:02
【问题描述】:

假设我有一个表结构如下:

Table_A
    sid (auto increment, primary)
    .... some other column ....
    created_at (created using laravel eloquent timestamps() function)
    updated_at (same as above)

然后,我创建了一个新列。

$new_row = new TableA; //TableA is a model created pointing to Table_A
$new_row->col1 = 'Some value';
$new_row->col2 = 'Some other value';
// Some other field
$new_row->save()

那么,就在这段代码之后,

dd($new_row->sid);

令人惊讶的是,输出是:

null

但是,当我将其更改为:

dd($new_row->id);

它返回 sid(即行的主键值)。当我在 Laravel 模型中使用自动增量作为主键时,主键的名称是否总是 id?或者为什么我只在使用名称id 时才获得价值?


附:让我说清楚:我知道如何获取主键值,并且我知道我可以在模型中设置主键的名称。我想知道的是,这种行为是否适用于所有主键,或者仅适用于具有主键的那些。

【问题讨论】:

    标签: php laravel laravel-5 model laravel-5.3


    【解决方案1】:

    在您的模型中定义主键。这将覆盖默认主键 id

    protected $primaryKey = 'sid';
    

    【讨论】:

    • 即使我实际上没有名为 id 的列?
    • laravel 使用默认 id 作为主键
    • 我不是在这个答案中寻求解决方案。我说我知道我可以使用 $new_row->id 来获得我想要的东西。我问为什么它总是 id 即使我根本没有名为“id”的列。如果我没有使用非自动递增的东西作为主键,它仍然是 id 吗?