Laravel,将现有实体添加到实体集合

Laravel,将现有实体添加到实体集合,laravel,eloquent,Laravel,Eloquent,我正在尝试将现有实体添加到实体集合,如 $entity->collection->push(entity::where('field','value')->first()); [...] //当我记录$entity时,我会在$entity->collection中看到新实体 $entity->save(); //但数据库上什么都没有 你知道为什么它不保存实体吗?有很多案例 假设$entity是雄辩的实例,而collection是表示有许多关系的神奇属性,那么您有如下情况: 类实体扩展模型 {

我正在尝试将现有实体添加到实体集合,如

$entity->collection->push(entity::where('field','value')->first());
[...]
//当我记录$entity时,我会在$entity->collection中看到新实体
$entity->save();
//但数据库上什么都没有

你知道为什么它不保存实体吗?

有很多案例

假设
$entity
是雄辩的实例,而
collection
是表示
有许多关系的神奇属性,那么您有如下情况:

类实体扩展模型
{
//...
公共功能集合()
{
返回$this->hasMany(实体:类);
}
//...
}
然后,
collection
是访问
$entity->collection()->get()
的唯一捷径,因此它不能用于变异数据库

相反,你可以打电话

$entity->collection()->保存(
实体::其中('field','value')->first()
);

属于造口

多对多关系具有方法
attach
,该方法接受相关记录的键作为第一个参数:

$entity->collection()->保存(
//假设关系是由主键建立的
实体::where('field','value')->first()->getKey()
);

这里有完整的文档-

您在下面提到的
,这是一个重要的信息

您可以阅读更多有关在中管理多对多关系的信息

但简而言之,您希望使用
->attach($entity)

因此,您的代码应该是:

$entity->collection()->附加(
实体::where('field','value')->first()->getKey()
);

save
不起作用,因为该实体已存在,只应用于将新实体保存到该数据库中,并同时将它们附加到关系中。

我的集合是一个
目录
。所以我按照您的建议尝试了
$entity->collection()->save(entity::where('field','value')->first())
在这种情况下,您可以使用
->attach($id)
。请检查我的最新答案。