LARAVEL hasManyThrough仍使用ID作为外键

时间:2018-11-17 14:54:53

标签: laravel laravel-5

您好,他想度过一个国家的美好时光。但是我遇到了错误。

基本上这是结构

员工   有网站, 现场   有地区 区域   有休息日

我已经在员工模型中声明了这一点

public function restdays() 
{
    return $this->hasManyThrough('App\ref_restdays', 'App\ref_gacomsit', 'region', 'region');
}

但是我得到这个错误

[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Conversion failed when converting the varchar value 'RUAE' to data type int. (SQL: select [ref_restdays].*, [ref_gacomsit].[region] from [ref_restdays] inner join [ref_gacomsit] on [ref_gacomsit].[id] = [ref_restdays].[region] where [ref_gacomsit].[region] in (855))

显然,它仍使用我的站点主文件的ID,就像我声明要使用REGION外键一样。

谁能解释我的错误在哪里?感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

原来,我不需要使用hasManyThrough。我刚刚在网站主文件上声明了hasMany,如下所示:

public function restdays() 
{
    return $this->hasMany( 'App\ref_restdays', 'region', 'region');
}

然后,我只需使用点语法对查询使用嵌套的紧急加载

这是我的最终查询,在最后一行,我只引用site.restdays以获取休息日列表。

$employees = hr_employee::select(
    'hr_employee.id',
    'empno',
    'first_name',
    'family_name',
    'empstatus',
    'empstatus_eff_date',
    'contcatg_code',
    'post_title_code',
    'cs',
    'group_initial_joined',
    'returned_date',
    'mcat2',
    'othours1',
    'othours2',
    'othours3'
)
->where([
    ['empno','=',$empno]
])
->with(['catg', 'post', 'site.restdays'])
->get();