в таблице категорий 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 пожалуйста помоги
как получить, например: Электрик - это поставщик, потому что идентификатор поставщика равен 2, а идентификатор родительского_электрика - 2, вы можете мне помочь, пожалуйста






Вам нужно немного изменить родительские отношения, это должно быть 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
но сэр, как получить вроде: Электрик - продавец
чего ты хочешь добиться?