gpt4 book ai didi

php - 在laravel中加载双向递归关系

转载 作者:行者123 更新时间:2023-12-04 10:54:47 25 4
gpt4 key购买 nike

在我目前正在进行的一个项目中,我必须将同一模型的两个实体链接在一起,创建递归关系。这将在数​​据库中创建一个条目,其中一个实体标记为“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);

如果您使用标准转换,则可以将该方法转换为 getter使它像一个数据库列。现在你可以把它取为 $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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com