尝试 return 透视资源 Laravel 中的数据

Trying to return pivot data in Resource Laravel

我正在尝试 return 将数据转换为资源。 枢轴 table 有效,我可以像预期的那样添加和删除条目,但我无法在 ActivityResource 中获得 user_id returned... 在 Laravel 文档中看起来很简单,我是不是漏掉了什么?

// Activity.php
class Activity extends Model
{
    public function members()
    {
        return $this->belongsToMany('App\User', 'activity_user', 'user_id', 'activity_id')->withPivot('activity_id','user_id')->withTimestamps();
    }
}
// User.php
class User extends Authenticatable
{
    public function joinedactivities()
    {
        return $this->belongsToMany('App\Activity');
    }
}

在我的 ActivityController 中,我想 return 一个新创建的具有 'eager-loaded' 关系的 ActivityResource

// ActivityController 
public function show($id)
{
    $activity = Activity::with('members')->findOrFail($id);

    /* foreach ($activity->members as $user) {
        echo $user->id . " "; // With this I can actually see the right ids
    }
    return;*/

    return new ActivityResource($activity);
}

活动资源:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'title' => $this->title,
        'attendees' => $this->whenPivotLoaded('activity_user', function () {
            return $this->pivot->user_id;
        }),
    ];
}

我没有收到任何错误,只是没有 returned 与会者字段。我尝试了很多东西,为此苦苦挣扎。帮助非常感谢。 我正在使用 Laravel 6.

->withPivot('activity_id','user_id') 不需要。无论如何,这些字段都会出现在您的关系对象上。对于资源,我认为您可以执行以下操作:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'title' => $this->title,
        // If the relation 'members' is loaded, get an array of user ids otherwise, return null
        'attendees' => $this->relationLoaded('members') ? $this->members->pluck('pivot.user_id')->unique()->all() : null
    ];
}

主要问题是关系是多对多关系,这意味着有不止 1 个枢轴。使用此解决方案,您的对象将如下所示。

{
    id: 3,
    title: 'A Title',
    attendees: [
        1,
        2,
        3,
    ],
}

如果您希望将 ID 连接成单个字符串,就像您评论的 foreach 中那样,请将 all() 替换为 join(' ')

// If the relation 'members' is loaded, get an string of user ids otherwise, return null
'attendees' => $this->relationLoaded('members') ? $this->members->pluck('pivot.user_id')->unique()->join(' ') : null
{
    id: 3,
    title: 'A Title',
    attendees: '1 2 3',
}