未找到列:1054未知列问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未找到列:1054未知列问题相关的知识,希望对你有一定的参考价值。

我有一个有id,name,timestamps和其他字段的Account模型,我有一个有account_id和user_id字段的AccountUser模型,我有一个有用户id的User模型,我想用$this->hasManyThrough(AppUser,'AppAccountUser')->来获取账户的用户(账户有很多用户)。

我试图使用$this->hasManyThrough('AppUser', 'AppAccountUser')->get()来按账户获取用户(账户有很多用户);但我出现了一个错误SQLSTATE[42S22]。未找到列:1054 在'on子句'中的未知列'user.account_user_id'(SQL:select users.*, account_users.account_idusers 内接 account_users 关于 account_users.id = users.account_user_id 哪儿 account_users.account_id = 1).

我不需要'user.account_user_id'列,但它在查询中,该怎么做?谢谢你。

答案
  1. 你必须在模型中而不是在查询中定义关系。
  2. 对于这种情况,你应该使用hasOne属性。
  3. 你必须在模型中指定关系键。
    // In the User class
    public function account()
    {
        return $this->hasOne(UserAccount::class,'account_id','id');
    }

然后调用关系与

$user->account();

请看 文件 .

另一答案

hasManyThrough(作为所有关系)有一个默认值,如果你什么都不放的话。

hasManyThrough('AppUser', 'AppAccountUser')

它从Models的名字中得到默认值create。

从文档中可以看出,它的默认值是创建自Models的名称。

传递给hasManyThrough方法的第一个参数是我们希望访问的最终模型的名称,而第二个参数是中间模型的名称。

在执行关系的查询时,将使用典型的Eloquent外键约定。如果你想自定义关系的键,你可以将它们作为第三个和第四个参数传递给hasManyThrough方法。第三个参数是中间模型上的外键的名称。第四个参数是最终模型上的外键的名称。第五个参数是本地键,而第六个参数是中间模型的本地键。

参见文档:https:/laravel.comdocs7.xeloquent-relationships#has-many-though。

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

未找到列:1054 laravel 4 中的未知问题

未找到列:1054未知列问题

Laravel vue 未找到列:1054 未知

未找到列:1054“where 子句”中的未知列“MONTH(date)”[重复]

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

未找到列:1054“on 子句”中的未知列“comments.commenter_id”