阅读(2160) (10)

Laravel 8 条件中间表信息

2021-07-08 09:45:41 更新

除了在你的资源响应中有条件地包含关联外,你还可以使用 whenPivotLoaded 方法有条件地从多对多关联的中间表中添加数据。 whenPivotLoaded 方法接受的第一个参数为中间表的名称。第二个参数是一个闭包,它定义了在模型上如果中间表信息可用时要返回的值:

/**
 * 将资源转换成数组
 *
 * @param  IlluminateHttpRequest  $request
 * @return array
 */
public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'expires_at' => $this->whenPivotLoaded('role_user', function () {
            return $this->pivot->expires_at;
        }),
    ];
} 

如果你的中间表使用的是 pivot 以外的访问器,你可以使用 whenPivotLoadedAs 方法:

/**
 * 将资源转换成数组
 *
 * @param  IlluminateHttpRequest  $request
 * @return array
 */
public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'expires_at' => $this->whenPivotLoadedAs('subscription', 'role_user', function () {
            return $this->subscription->expires_at;
        }),
    ];
}