Прежде всего, вам нужно исправить отступы кода, чтобы не запутаться. Во-вторых, вы поставили точку с запятой в неправильных местах. В-третьих, вам нужно передать $id
внутрь функции из-за переменной scope.
$q = Formation::query()
->whereIn('f2.theme_id', function($r) use ($id) {
$r->select('f.theme_id')->from('user_formation AS uf')
->join('formation', function($join) use ($id) {
$join->on('uf.formation_id', '=', 'f.id')
->where('uf.user_id', '=', $id);
}
);
})
->whereNotIn('f2.id', function($s) use ($id) {
$s->select('formation.id')
->from('user_formation')
->where('user_id', '=', $id);
})->get();
Примечание: если вы используете VSCode, я предлагаю использовать PHP Intelephense, так как это поможет с автозаполнением, синтаксисом чек, эт c.