【问题标题】:Why is laravel changing the name of the column?为什么 laravel 会更改列的名称?
【发布时间】:2018-01-25 22:25:11
【问题描述】:

这是我收到的错误:

“SQLSTATE[42S22]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]列名“user_user_id”无效。(SQL:插入 [APPLICATIONS]([app_nm] , [app_path], [app_readme_path], [app_manual_path], [is_url], [user_user_id]) 值 (TEST, uploads/2240120001.jpg, uploads/50225114.5-Data.pdf, uploads/9275171481557696855-FixedDeposits.docx, 0, 1 ))"

我有 3 个模型:

User.php

public $primaryKey = 'user_id';

public function posts()
{
    return $this->hasMany('App\Post');
}

public function roles()
{
    return $this->belongsToMany('App\Role','USER_ROLE','user_id','role_id');
}

Role.php

public $timestamps = false;
public $primaryKey = 'role_id';

public function users()
{
    return $this->belongsTo('App\User');
}

Post.php

public $timestamps = false;
protected $table = 'APPLICATIONS';
protected $primaryKey='app_id';

public function user()
{
    return $this->belongsTo('App\User');
}

Laravel 将 'user_' 添加到 'user_id' 列名,导致上述错误。 我检查了 laravel 5.5 api,看看是否需要提供额外的参数,但似乎不是这样。

什么会导致这种连接,我该如何解决?

【问题讨论】:

  • 我强烈建议阅读文档。

标签: php sql-server laravel laravel-5 laravel-5.5


【解决方案1】:

您没有正确定义 Post 上的用户关系。默认情况下,如果不显式添加相关表,Eloquent 会根据表名和主键名推断外键字段的名称。

在您的情况下,关系表名称是 user,而您定义的该表的主键是 user_id。因此,它假定 APPLICATIONS 表中的外键是 user_user_id

要解决这个问题,请明确命名您的关系中的外部和其他表 ID:

public function user()
{
    return $this->belongsTo('App\User', 'user_id', 'user_id');
}

上述代码中的第二个参数将是您在 APPLICATIONS 表上的外键(因为您没有明确说明是什么意思)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 2021-12-04
    • 1970-01-01
    • 2020-08-30
    • 2022-01-14
    • 2021-04-05
    • 2020-05-23
    相关资源
    最近更新 更多