尝试 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',
}
我正在尝试 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',
}