【问题标题】:Laravel - SQLSTATE[42S22]: Column not found: 1054 Unknown column 'hr_leave_type_details.hr_leave_type_id'Laravel - SQLSTATE [42S22]:找不到列:1054 未知列 'hr_leave_type_details.hr_leave_type_id'
【发布时间】:2020-04-06 22:30:35
【问题描述】:

在我的 Laravel-5.8 应用程序中,我正在尝试查看索引上的动态输入记录。

这是索引视图刀片:

public function index()
{  
    $userCompany = Auth::user()->company_id;    

    $leavetypes = HrLeaveType::where('company_id', $userCompany)->get();

    return view('hr.leave_types.index')->with('leavetypes', $leavetypes);     
}

表格:

CREATE TABLE `hr_leave_types` (
  `id` int(11) UNSIGNED NOT NULL,
  `company_id` int(11) DEFAULT NULL,
  `leave_type_name` varchar(100) NOT NULL,
  `leave_type_code` varchar(20) DEFAULT NULL,
  `description` longtext DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `hr_leave_types`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `hr_leave_types_uniq1` (`company_id`,`leave_type_name`),
  ADD UNIQUE KEY `hr_leave_types_uniq2` (`company_id`,`leave_type_code`);

ALTER TABLE `hr_leave_types`
MODIFY `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT;


CREATE TABLE `hr_leave_type_details` (
  `id` int(11) NOT NULL,
  `leave_type_id` int(11) NOT NULL,
  `company_id` int(11) NOT NULL,
  `employment_type_id` int(11) NOT NULL,
  `no_of_days` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `hr_leave_type_details`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `hr_leave_type_details_uniq1` (`company_id`,`leave_type_id`,`employment_type_id`);

ALTER TABLE `hr_leave_type_details`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
I am developing a dynamic input field. This involves two tables:

class HrLeaveType extends Model
{
  public $timestamps = false;
  protected $table = 'hr_leave_types';

  protected $primaryKey = 'id';
  protected $fillable = [
      'company_id',
      'leave_type_name',
      'number_of_days',
      'leave_type_code',
    ];

  public function leavetypedetail()
  {
      return $this->hasMany('App\Models\Hr\LeaveTypeDetail');
  }
}

class HrLeaveTypeDetail extends Model
{
  public $timestamps = false;
  protected $table = 'hr_leave_type_details';
  protected $primaryKey = 'id';
  protected $fillable = [
      'leave_type_id',
       'company_id',
      'employment_type_id',
      'no_of_days',
    ];

  protected $casts = [
     'data' => 'array',
  ];

  public function leavetype()
  {
    return $this->belongsTo('App\Models\Hr\HrLeaveType');
  }

  public function employmenttype()
  {
    return $this->belongsTo('App\Models\Hr\HrEmploymentType');
  }    
}

查看

        <tbody>
            @foreach($leavetypes as $key => $leavetype)
                    <td>
                        {{$leavetype->leave_type_name ?? '' }}
                    </td>  
                    <td>
                        {{$leavetype->leave_type_code ?? '' }}
                    </td>                            
                    <td>
                        {!! Str::words($leavetype->description, 20, ' ...') !!}
                    </td> 
                    <td>
                        @foreach($leavetype->leavetypedetail as $key => $leavetypedetail)
                            <ul class="list-unstyled">
                                <li> 
                                    {{$key+1}}.  {{$leavetypedetail->employmenttype->employment_type ?? '' }}
                                </li>
                            </ul>
                        @endforeach
                    </td>                             
                    <td>
                        @foreach($leavetype->leavetypedetail as $key => $leavetypedetail)
                            <ul class="list-unstyled">
                                <li> 
                                    {{$key+1}}.  {{$leavetypedetail->employmenttype->employment_type ?? '' }}
                                </li>
                            </ul>
                        @endforeach
                    </td>                             
                    <td>
                        @foreach($leavetype->leavetypedetail as $key => $leavetypedetail)
                            <ul class="list-unstyled">
                                <li>
                                    {{$key+1}}.  {{$leavetypedetail->no_of_days ?? '' }}
                                </li>
                            </ul>
                        @endforeach
                    </td>                         

            </tr>
            @endforeach 
        </tbody>

当我试图查看索引视图刀片时,我得到了这个错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'hr_leave_type_details.hr_leave_type_id' in 'where clause' (SQL: select * from hr_leave_type_details where hr_leave_type_details.hr_leave_type_id = 1 and hr_leave_type_details.hr_leave_type_id is not null)

但是,当我删除这部分代码时:

                    <td>
                        @foreach($leavetype->leavetypedetail as $key => $leavetypedetail)
                            <ul class="list-unstyled">
                                <li> 
                                    {{$key+1}}.  {{$leavetypedetail->employmenttype->employment_type ?? '' }}
                                </li>
                            </ul>
                        @endforeach
                    </td>                             
                    <td>
                        @foreach($leavetype->leavetypedetail as $key => $leavetypedetail)
                            <ul class="list-unstyled">
                                <li>
                                    {{$key+1}}.  {{$leavetypedetail->no_of_days ?? '' }}
                                </li>
                            </ul>
                        @endforeach
                    </td> 

错误消失了。

leave_type_id 在表中。我不知道它是从哪里得到 hr_leave_type_id 的

我该如何解决这个问题?

谢谢

【问题讨论】:

  • 可能来自您的关系之一:“Eloquent 根据模型名称确定关系的外键。”尝试将 foreign_key/local_key 添加到您的关系 laravel.com/docs/master/eloquent-relationships
  • 或者...将列leave_type_id重命名为hr_leave_type_id
  • 我按照你的建议做了,但问题仍然存在

标签: laravel


【解决方案1】:

我将 Eloquent 模型关系更改为:

public function leavetype()
{
    return $this->belongsTo('App\Models\Hr\HrLeaveType', 'leave_type_id', 'id');
}

public function employmenttype()
{
    return $this->belongsTo('App\Models\Hr\HrEmploymentType', 'employment_type_id', 'id' );

}

【讨论】:

    猜你喜欢
    • 2018-02-21
    • 2015-12-08
    • 2018-11-02
    • 2019-10-02
    • 2017-04-03
    • 2021-10-02
    • 1970-01-01
    • 2016-01-06
    相关资源
    最近更新 更多