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]