Eloquent 模型未按正确顺序连接表

Posted

技术标签:

【中文标题】Eloquent 模型未按正确顺序连接表【英文标题】:Eloquent Model not joining tables in the right order 【发布时间】:2018-08-05 19:14:51 【问题描述】:

我正在尝试加入 2 个表(staff 和 hr_validations),然后将结果返回到我的 vuejs 应用程序以显示。 我的雄辩模型:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\hr_validation;

class hrvalidationController extends Controller

    public function getStaffLoans()
    
    	$loan = hr_validation::join('staff','staff.staff_id','=','hr_validations.staff_id_fk')->where('hr_validations.validate',NULL);
    	$date = $loan->pluck('hr_validations.created_at');
    	$name= $loan->pluck('staff.staff_name');
    	return([$loan->pluck('staff_id_fk'), $loan->pluck('loan_amount'), $loan->pluck('loan_tenor'), $loan->pluck('loan_purpose'), $loan->pluck('description'), $date, $loan->pluck('hr_validations.id'), $name]);	
    

hr_validations 表:

员工表:

问题在于 Eloquent 模型在发送到我的 VueJS 应用程序的结果中填充 staff_name 列的方式。当我在 VueJS 中迭代结果时,它只是按照它出现在人员表中而不是根据 hr_validations 表中的 staff_id_fk 填充它,如下所示:

如何更正员工姓名列,使其显示每个员工代码的正确员工姓名,以便下面的员工姓名列显示 [“Anthony Babatunde”,“John Jackson”,“Anthony Babatunde”] 而不是它在下面显示的内容:

任何帮助将不胜感激。谢谢!

【问题讨论】:

Laravel 生成的查询是什么? hr_validation::join('staff','staff.staff_id','=','hr_validations.staff_id_fk')->where('hr_validations.validate',NULL)->toSql();。另外,为什么使用pluck 而不是选择? @craig_h 哈!显然问题是我在加入之前没有使用 select 语句。谢谢你指出我正确的方向。 【参考方案1】:

显然,我在 join 操作之前省略了 select 语句。这样做了,我的代码运行良好。

【讨论】:

可以mark the answer as accepted吗?这会向其他用户显示问题已解决。 @JonasStaudenmeir 感谢您的提示。干杯!

以上是关于Eloquent 模型未按正确顺序连接表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - Eloquent 连接

Laravel Eloquent:如何从连接表中仅获取某些列

在 Eloquent 中将数据透视表与多个表连接起来

限制从 Laravel Eloquent 中连接的表/模型返回的字段

Laravel/Eloquent 分页和 groupBy 用于 postgres 物化视图模型

如何使用 Eloquent 模型获取多个表列名