やりたいこと
多対多の関係性のテーブルからリレーション先のデータを取得するとpivotテーブルの情報も含まれてしまうから、それを除外した上で取得したい。
以下のようなUserとGroupのmodelがあります。
User.php
class User extends Authenticatable
{
public function groups()
{
return $this->belongsToMany(Group::class);
}
}
Group.php
class Group extends Model
{
public function users()
{
return $this->belongsToMany(User::class);
}
}
GroupからUserの情報を取得しようとすると、、
GroupController.php
$group = Group::find(1);
$group->users()->get(['users.id', 'name'])
pivotテーブルの情報も含まれていて、これを削除したい。
group: [
{
id: 3,
name: "テスト太郎",
pivot: {
user_id: 3,
group_id: 1
}
},
対応方法
方法は二つあります。
1.リレーション先のモデルにhiddenプロパティを追加する
User.php
class User extends Authenticatable
{
protected $hidden = [
'pivot',//追加する
];
public function groups()
{
return $this->belongsToMany(Group::class);
}
}
2.取得時にmakeHidden()を使用する
GroupController.php
$group = Group::find(1);
$group->users()->get(['users.id', 'name'])->makeHidden('pivot');
参考:https://readouble.com/laravel/8.x/ja/eloquent-collections.html#method-makeHidden
以上