Raw SQL
SELECT
modules.name AS module,
(CASE WHEN facility_module.facility_id IS NULL
THEN 0
ELSE 1
END) AS granted
FROM
modules
LEFT JOIN facility_module ON modules.name = facility_module.module_name
AND facility_module.facility_id = 'a3d500f9-b2f7-49ed-bfa8-df40a41e3aa9';
Explicit Join
$modules = (function() {
$query = \App\Models\Module::query();
$query->leftJoin('facility_module', function($join) {
$join->on('facility_module.module_name', '=', 'modules.name');
$join->where('facility_module.facility_id', '=', 'a3d500f9-b2f7-49ed-bfa8-df40a41e3aa9');
});
$query->select('modules.name', 'facility_module.facility_id');
$modules = $query->get();
return $modules->map(function ($module) {
return [
'name' => $module->name,
'granted' => ! is_null($module->facility_id),
];
});
})();
Eager Loading
$modules = (function() {
$query = \App\Models\Module::query();
$modules = $query->get();
return $modules->map(function ($module) {
return [
'name' => $module->name,
'granted' => $module->facilities->contains('id', 'a3d500f9-b2f7-49ed-bfa8-df40a41e3aa9')
];
});
})();