Как получить запись в одной таблице с самостоятельным присоединением в laravel

в таблице категорий 3 поля

id   categoryName    parent_id
1    Architect       0
2    Vendor          0
3    Res Architect   1
4    Electrician     2

в моей модели

public function parent()
{
  return $this->belongsTo(Category::class, 'id');
}

public function children()
{
  return $this->hasMany(Category::class, 'parent_id');
}

в контроллере

SELECT t2.categoryName FROM categories t1, categories t2
WHERE t1.id = id 
AND t2.parent_id = t1.id

я понятия не имею, чтобы получить запись с самосоединением в одну таблицу в laravel пожалуйста помоги

чего ты хочешь добиться?

Adnan Mumtaz 17.07.2018 14:08

как получить, например: Электрик - это поставщик, потому что идентификатор поставщика равен 2, а идентификатор родительского_электрика - 2, вы можете мне помочь, пожалуйста

shiv 17.07.2018 15:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
2
485
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно немного изменить родительские отношения, это должно быть parent_id, потому что дочерняя категория ссылается на родительскую категорию с помощью поля parent_id.

public function parent()
{
  return $this->belongsTo(Category::class, 'parent_id');
}

Вы можете сделать это так

Получить все родительские категории с дочерними

$parentCategories  = Category::with('children')->where('parent_id', 0)->get();

Получить всех детей со своими родителями

$childCategories = Category::with('parent')->where('parent_id','>', 0)->get();

Теперь возьми вот так

foreach($parentCategories as $parentCategory){
    dd($parentCategory->children); //children for parent category 
}

Аналогично для дочерних категорий

foreach($childCategories as $childCategory){
    dd($childCategory->parent); //parent of child category
}

Призовите электрика (по вашему запросу в комментарии)

$electrician = Category::with('parent')->where('id', 4)->first();
dd($electrician->parent); //this will be Vendor

ИЛИ ЖЕ, если вы хотите получить всех дочерних элементов Vendor, тогда

$vendor = Category::with('children')->where('id', 2)->first();
dd($vendor->children); //children of vendor

но сэр, как получить вроде: Электрик - продавец

shiv 17.07.2018 15:10

Другие вопросы по теме