首页 > 解决方案 > Laravel - 尝试保存数据时插入语句中的列发生变化

问题描述

我正在做一个 Laravel 项目,但在尝试保存数据时遇到了问题。这是我收到的错误消息:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_user_id' in 'field list' (SQL: insert into link_user_accounts (account_id, user_user_id, updated_at, created_at) 值 (1, 6, 2019-12-30 20:32: 54、2019-12-30 20:32:54))

我期待看到以下插入语句:

insert into link_user_account(account_id, user_id) values(val1, val2)

但在这种情况下,user_id不知何故被重命名为user_user_id

楷模

  1. 帐户
  2. 用户
  3. 链接帐户用户

用户控制器

    public function store(Request $request)
    {
       $account_id = Auth::user()->account_id;

       $user = new User();

       $user->first_name = $request->first_name;
       $user->last_name = $request->last_name;
       $user->practice_number = $request->practice_number;
       $user->save();

       $user_account = new LinkUserAccount();
       $user_account->account_id = $account_id;

       $user->link_user_account()->save($user_account);

用户模型关系

public function link_user_account()
{
    return $this->hasOne(LinkUserAccount::class);
}

账户模型关系

public function link_user_account()
{
    return $this->hasOne(LinkUserAccount::class);
}

LinkUserAccount 关系

public function user()
{
    return $this->belongsTo(User::class, 'account_id', 'user_id');
}

public function account()
{
    return $this->belongsTo(Account::class, 'account_id');
}

标签: laraveleloquent

解决方案


LinkUserAccount模型上,删除user_id另一个键:

public function user()
{
     return $this->belongsTo(User::class); // It will automatically go to id on User
}

你有它的方式,在另一个关键参数中,它告诉 Laravel在User模型上user_id寻找,而不是,它结合包含作为 FK 和稍微不寻常的命名约定(LinkUserAccount),可能把它弄糊涂了,到了寻找的地步。user_ididaccount_iduser_user_id


推荐阅读