为什么laravel会更改列的名称?

时间:2018-01-25 22:25:11

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

以下是我收到的错误:

“SQLSTATE [42S22]:[Microsoft] [SQL Server的ODBC驱动程序13] [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,看看是否有一个需要提供的附加参数,但似乎并非如此。

导致此连接的原因是什么?如何解决?

1 个答案:

答案 0 :(得分:2)

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

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

要解决此问题,请明确说明您的关系中的外国和其他表ID:

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

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