【问题标题】:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'answers.question_id' in 'where clause'SQLSTATE [42S22]:找不到列:1054 'where 子句'中的未知列'answers.question_id'
【发布时间】:2019-08-18 20:23:23
【问题描述】:

我正在尝试建立关系
问题hasMany答案

问题.php

public function answers()
{
   return $this->hasMany(Answer::class);    
}

然后在 show.blade.php 中显示一个问题的答案,例如:

@foreach($question->answers as $answer) 
    {{$answer->ans}} //ans is the answers body from database
@endforeach

得到这个错误:

SQLSTATE[42S22]:未找到列:1054 'where 子句'中的未知列 'answers.question_id'(SQL:select * from answers where answers.question_id = 5 和 answers.@ 987654330@不为空)(查看:C:\Users\harsh\sa1\resources\views\questions\show.blade.php)

【问题讨论】:

  • 请同时发布您的迁移
  • 你的答案表是什么样子的?
  • question_id != q_id - 您需要与列的命名保持一致,否则在hasMany() 中明确指定。更容易将 q_id 重命名为 question_id
  • 查询说的 question_id 但你的表有列 q_id 只是改变它
  • 在数据库中将字段名称 q_id 更改为 question_id 或在关系中指定字段名称 q_id

标签: php laravel laravel-5 eloquent


【解决方案1】:

这是因为 laravel 模型在使用关系时默认会查找 question_id。相反,您必须明确提及。 像下面这样更改模型文件中的关系,

  public function answers()
  {
    return $this->hasMany(Answer::class, 'q_id', 'id');     
  }

【讨论】:

    【解决方案2】:

    将您的代码更改为

    public function answers()
    {
       return $this->hasMany(Answer::class,'q_id','id');    
    }
    

    【讨论】:

      【解决方案3】:

      尝试将Answer::class 直接更新为您的模型类,可以是这样的:

      public function answers()
      {
         return $this->hasMany('App\Models\Answer', 'q_id', 'id');    
      }
      

      或者这个:

      public function answers()
          {
             return $this->hasMany('App\Answer', 'q_id', 'id');    
          }
      

      或您创建模型的任何位置。 并添加 foreign keylocal key 约束,在您的情况下必须是 q_idid 其中 id 是问题 id(主键)。

      【讨论】:

        猜你喜欢
        • 2021-03-29
        • 2023-04-07
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        • 2020-06-08
        • 1970-01-01
        相关资源
        最近更新 更多