我有一个名为 Shifts 的模型,它与 shift_employee 表具有 belongsToMany 关系,该表充当数据透视表来记录员工的轮班申请。我还有一个范围,以便我可以返回带有移位对象的应用程序。这是我的 Shift 模型的一部分:
class Shift extends Model
{
//
use SoftDeletes;
use \App\Http\Traits\UsesUuid;
protected $guarded = [];
public function applications()
{
return $this->belongsToMany(Employee::class, 'shift_employee')->as('application')->withTimestamps()->withPivot('shortlisted');
}
...
public function scopeWithApplications($query)
{
$query->with('applications');
}
...
}
我的 shift_employee 数据透视表非常简单,结构如下所示。我有一个额外的字段来确定应用程序是否已入围:
Schema::create('shift_employee', function (Blueprint $table) {
$table->primary(['employee_id', 'shift_id']);
$table->uuid('employee_id');
$table->uuid('shift_id');
$table->boolean('shortlisted')->default(false);
$table->timestamps();
$table->foreign('employee_id')
->references('id')
->on('employees');
$table->foreign('shift_id')
->references('id')
->on('shifts')
->onDelete('cascade');
});
下面是我用于检索班次信息的 API show 函数:
public function show($id)
{
$shift = Shift::where('id', $id)
->with...()
->withApplications()
->with...()
->first();
return response([
'shift' => $shift,
]);
}
这是我得到的回应:
"shift": {
"id": "2b91f55b-c0ff-4bdb-abc4-02604ba6a161",
"some_field": "some_value",
...
"applications": [
{
some_field: "some_value",
...
application: {
shift_id: "2b91f55b-c0ff-4bdb-abc4-02604ba6a161",
employee_id: "some_uuid",
created_at: ...,
updated_at: ...,
shortlisted: 0
}
},
{
...
}
]
...
}
我想要做的是用数据透视表中的字段“入围”替换整个“应用程序”内部对象,这样它看起来像这样:
我怎样才能做到这一点?理想情况下,雄辩地调用 withPivot 之类的东西,但不包括其他字段并且不返回对象。我在文档中找不到它,但是否存在类似的东西?
饮歌长啸
当年话下
呼如林