【发布时间】: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