Это приложение позволяет пользователям вкладывать домены. Домен - это просто красноречивая модель с идентификатором, строковым столбцом, который является именем домена, и parent_id, который связывает его с другим доменом как «дочерний» или «поддомен». Теоретически, пользователь может вкладывать деньги настолько глубоко, насколько это необходимо. Я пытаюсь создать метод доступа к доменному пути, который будет напоминать URL. Что-то вроде. ParentMostDomain/NextChildDomain/AnotherChildDomain/ChildMostdomain
, где каждый из родителей домена является строковым именем. В модели, в которой будет работать метод доступа, хранится domain_id
, который является дочерним доменом, и отношение для доступа к полной модели домена. На модели Domain
я создал отношения parentDomain
и parentDomainsRecursive
примерно так:
/**
* Relationship to the domain the Model is in relation to
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function parentDomain()
{
return $this->belongsTo(Domain::class, 'parent_id', 'id');
}
/**
* Recursive Parent Domains
*
* @return \App\Models\Domain
*/
public function parentDomainsRecursive()
{
return $this->parentDomains()->with('parentDomainsRecursive');
}
А доступ имеет к домену: $this->domain->parentDomainsRecursive
. У каждого домена есть имя, и это то, что я бы использовал, чтобы построить domain_path
от самого родителя до самого ребенка. Пока все это кажется правильным, но по какой-то причине я не могу обернуться, просматривая все эти вложенные домены, начиная с самого ребенка. Любые мысли будут очень цениться! Мой аксессуар (не симпатичный) пока:
/**
* Domain Path Attribute
*
* @return mixed
*/
public function getDomainPathAttribute()
{
dd($this->domain->parentDomainsRecursive);
$domainPath = '';
foreach ($this->domain->parentDomainsRecursive as $domain) {
if ($domain) {
$domainPath . $domain->domain . '\\';
}
}
return $domainPath . '//' . $this->domain->domain;
}
Это dd($this->domain->parentDomainsRecursive);
выглядит примерно так:
"domain": {
"id": "451d35ee-4690-45a7-944c-8804ecfb759a",
"parent_id": "762db7de-0d01-4c87-95c5-b7bb52db3e38",
"name": "Fundamental grid-enabled artificialintelligence",
"created_at": "2019-01-16 21:54:53",
"updated_at": "2019-01-16 21:54:53",
"deleted_at": null,
"parent_domains_recursive": {
"id": "762db7de-0d01-4c87-95c5-b7bb52db3e38",
"parent_id": "a441e544-649c-4df5-8b42-2e731b19a85a",
"name": "Reduced modular budgetarymanagement",
"created_at": "2019-01-16 21:54:52",
"updated_at": "2019-01-16 21:54:52",
"deleted_at": null,
"parent_domains_recursive": {
"id": "a441e544-649c-4df5-8b42-2e731b19a85a",
"parent_id": null,
"name": "Multi-lateral eco-centric orchestration",
"created_at": "2019-01-16 21:54:52",
"updated_at": "2019-01-16 21:54:52",
"deleted_at": null,
"parent_domains_recursive": null
}
}
}
У самого родителя есть ноль parent_id
. В приведенном выше примере URL-адрес, который я хочу получить с помощью этого метода доступа, будет Multi-lateral eco-centric orchestration/Reduced modular budgetarymanagement/Fundamental grid-enabled artificialintelligence
.