Laravel 5.5-基于id将2个集合合并为一个集合?

Laravel 5.5-基于id将2个集合合并为一个集合?,laravel,eloquent,laravel-5.5,Laravel,Eloquent,Laravel 5.5,因此,我有两种型号的书籍和课程: $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:

因此,我有两种型号的
书籍
课程

$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逻辑输出):


基本上,我正在尝试将
easy\u book
字段从
books
返回到基于
class.id==books.classable\u id
返回的相应
类。知道如何合并它吗?

将关系添加到您的图书模型中,如下所示:

public function class() {
    return $this->belongsTo(Classes::class, 'id', 'classable_id);
}
然后你可以做:

Book::with('class')->select('id', 'classable_id', 'easy_book')->limit(3)->get();
然后,在适用的情况下,每个集合项都将有一个类集合


如果在这之后您想要操作它们,您可以使用此处所述的map函数:

这样做更有意义,只需在数据库级别进行操作就更容易了。您可以发布模型的代码以及它们之间的关系定义吗?您缺少了查询生成器链末尾的
->get()
。另外,如果
可分类id
书籍
模型上,我想知道
书籍
是否属于
。但是我猜的时候没有看到密码,我同意。我习惯了一本有多种体裁的书,忘记了在这个场景中
classible\u id
的相关性。
Book::with('class')->select('id', 'classable_id', 'easy_book')->limit(3)->get();