Laravel 5.5 - 根据 id 将 2 个集合合并为一个集合?
Laravel 5.5 - Merge 2 collections into one based on id?
所以我有 2 个模型 Books
和 Classes
:
$books = Books::limit(3)->get(['id','classable_id','easy_book']);
// Books returned:
{ id: 200,
classable_id: 2,
easy_book: false
},
{ id: 201,
classable_id: 3,
easy_book: true
},
{ id: 202,
classable_id: 4,
easy_book: false
}
$classIds = $books->pluck('classable_id');
$classes = Classes::whereIn('id', $classIds);
// Classes returned:
{ id: 2,
subject: Math,
students: 30
},
{ id: 3,
subject: History,
students: 30
},
{ id: 4,
subject: Physics,
students: 30
}
然后尝试得到以下输出(不合并查询,但像上面一样将它们分开,只使用 php 逻辑输出):
Classes returned:
{ id: 2,
subject: Math,
students: 30.
easy_book: false }, // trying to merge this!
{ id: 3,
subject: History,
students: 30.
easy_book: true}, // trying to merge this!
{ id: 4,
subject: Physics,
students: 30.
easy_book: false } // trying to merge this!
基本上,我试图将 books
返回的 easy_book
字段合并到基于 class.id == books.classable_id
返回的相应 class
字段。知道如何合并吗?
像这样向您的 Books 模型添加关系:
public function class() {
return $this->belongsTo(Classes::class, 'id', 'classable_id);
}
那么你可以这样做:
Book::with('class')->select('id', 'classable_id', 'easy_book')->limit(3)->get();
每个 collection 项将有一个 collection 的 类(如果适用)。
如果在那之后你想操作它们,你可以使用这里记录的地图函数:https://laravel.com/docs/5.7/collections#method-map
所以我有 2 个模型 Books
和 Classes
:
$books = Books::limit(3)->get(['id','classable_id','easy_book']);
// Books returned:
{ id: 200,
classable_id: 2,
easy_book: false
},
{ id: 201,
classable_id: 3,
easy_book: true
},
{ id: 202,
classable_id: 4,
easy_book: false
}
$classIds = $books->pluck('classable_id');
$classes = Classes::whereIn('id', $classIds);
// Classes returned:
{ id: 2,
subject: Math,
students: 30
},
{ id: 3,
subject: History,
students: 30
},
{ id: 4,
subject: Physics,
students: 30
}
然后尝试得到以下输出(不合并查询,但像上面一样将它们分开,只使用 php 逻辑输出):
Classes returned:
{ id: 2,
subject: Math,
students: 30.
easy_book: false }, // trying to merge this!
{ id: 3,
subject: History,
students: 30.
easy_book: true}, // trying to merge this!
{ id: 4,
subject: Physics,
students: 30.
easy_book: false } // trying to merge this!
基本上,我试图将 books
返回的 easy_book
字段合并到基于 class.id == books.classable_id
返回的相应 class
字段。知道如何合并吗?
像这样向您的 Books 模型添加关系:
public function class() {
return $this->belongsTo(Classes::class, 'id', 'classable_id);
}
那么你可以这样做:
Book::with('class')->select('id', 'classable_id', 'easy_book')->limit(3)->get();
每个 collection 项将有一个 collection 的 类(如果适用)。
如果在那之后你想操作它们,你可以使用这里记录的地图函数:https://laravel.com/docs/5.7/collections#method-map