Laravel 5.8:SQLSTATE [42S22]:找不到列:1054 未知列

Posted

技术标签:

【中文标题】Laravel 5.8:SQLSTATE [42S22]:找不到列:1054 未知列【英文标题】:Laravel 5.8: SQLSTATE[42S22]: Column not found: 1054 Unknown column 【发布时间】:2021-10-02 03:09:12 【问题描述】:

我有一个名为user_wallet 的表,如下所示:

然后在控制器上,我尝试了这个:

try 
    if ($request->pay_wallet == '1') 
        $us_id = Auth()->user()->usr_id;
        $user_wallet = UserWallet::find('user_id', $us_id);
        dd($user_wallet);
    
catch (\Exception $e) 
    dd($e);

但我收到此错误:

SQLSTATE[42S22]:找不到列:1054 '字段列表'中的未知列'2'(SQL:从user_wallet 中选择2,其中user_wallet.id = user_id 限制1)

但是,正如您在图片中看到的,有两个钱包的user_id 为 2。

那么这里出了什么问题?我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

find 方法只适用于 id 所以最好使用 where 子句

$user_wallet = UserWallet::where('user_id', $us_id);

【讨论】:

【参考方案2】:

我认为你使用find() 错误,这个方法只接受一个参数,它是你要查找的主键的值。因为您在数据透视表中并且不存在 id, 您必须在第一次出现时使用firstWhere('user_id', $us_id),否则您必须为数据透视表重写 find() 方法。

但请注意,一个用户可能有多个钱包,因此最好询问他们使用哪个钱包。

【讨论】:

调用未定义的方法 App\UserWallet::firstWhere() @tejoslaeslio:我猜你用的是6.*以下的laravel版本,那就用UserWallet::where('user_id', $us_id)->first();

以上是关于Laravel 5.8:SQLSTATE [42S22]:找不到列:1054 未知列的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [42S22]:找不到列:1054 未知列 laravel 5.1

Laravel 删除数据 - SQLSTATE [42S22]:找不到列:1054 未知列

Laravel 5 SQLSTATE [42S22]:找不到列

迁移 php artisan laravel 5.2 [PDOException] SQLSTATE[42S01]

SQLSTATE [42S22]:找不到列:在 laravel livewire 项目中

SQLSTATE [42S22]:未找到列:1054 未知列一对多(反向)关系 laravel