У меня есть красноречивая модель Skill
, которая является иерархическим элементом, использующим реализацию таблицы замыканий .
Как часть моего приложения, я хочу иметь возможность получить все листья, где isCategory = false
. Я могу добиться этого, используя следующий «необработанный» запрос в mysql:
SELECT *
FROM 56574730041811ea9fcb0800279ee528.skills a
WHERE
a.isCategory <> true AND
NOT EXISTS(SELECT uuid, parent_uuid, isCategory
FROM 56574730041811ea9fcb0800279ee528.skills b
WHERE b.parent_uuid <> 'null' AND
b.parent_uuid = a.uuid
);
Я хочу преобразовать его в запрос Laravel построителя запросов, но я не уверен, как реализовать b.parent_uuid = a.uuid
пункт. Например:
Skill::where('isCategory', false)
->whereNotExists(function($query) {
$query->select('uuid', 'parent_uuid')
->whereNotNull('parent_uuid')
->where('parent_uuid', '=', <How to reference the outer query?>)
});
Как мне успешно преобразовать этот запрос?