Laravel-SQLSTATE [42S22]:找不到列:1054未知列'hr_leave_type_details.hr_leave_type_id'

时间:2020-04-06 11:14:26

标签: laravel

在我的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]:找不到列:1054'where子句'中的未知列'hr_leave_type_details.hr_leave_type_id'(SQL:从hr_leave_type_details中选择*,其中hr_leave_type_details.hr_leave_type_id = 1且hr_leave_type_de_s不是)。

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

                    <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

我该如何解决?

谢谢

1 个答案:

答案 0 :(得分:0)

将雄辩模型关系更改为:

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' );

}