作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我目前正在进行的一个项目中,我必须将同一模型的两个实体链接在一起,创建递归关系。这将在数据库中创建一个条目,其中一个实体标记为“parent_entity”,另一个标记为“child_entity”。因此,我能够分别加载实体的父项和实体的子项。但是,我希望能够同时加载这两个关系并将它们一起返回。这有可能吗?
这是我到现在为止想出来的,虽然现在我还不能打电话 entity->load('linkedDatasets')
class Dataset extends Model implements Auditable
{
use Encryptable;
use \OwenIt\Auditing\Auditable;
public function parentDatasets() {
return $this->belongsToMany(Dataset::class, 'linked_datasets', 'dataset_id',
'linked_dataset_id');
}
public function childDatasets() {
return $this->belongsToMany(Dataset::class, 'linked_datasets', 'linked_dataset_id',
'dataset_id');
}
public function linkedDatasets() {
$children = $this->childDatasets;
$parents = $this->parentDatasets;
return $parents->merge($children);
}
}
最佳答案
你的方法工作正常,但不是加载新方法,你不能因为它是一个方法而不是关系,只需将它们包含在 with()
中。方法。
Dataset::with('parentDatasets', 'childDatasets')->get($id);
$dataset->linked_datasets
.加分项,concat 比merge 更有效。
public function getLinkedDatasetsAttrbiute() {
$children = $this->childDatasets;
$parents = $this->parentDatasets;
return $parents->concat($children);
}
Dataset.php
模型。,以便它自动序列化。
protected $appends = ['linked_datasets'];
关于php - 在laravel中加载双向递归关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59281273/
我是一名优秀的程序员,十分优秀!