I understand how to use Eloquent for basic queries and relationships, but I start getting confused when selecting information based on relationships in multiple tables.
Assuming your relations are correct and related table names are: categories and types, this will do the job:
Product::with('productdetails')
->whereHas('categories', function ($query) use ($submenu_id) {
$query->where('categories.id', '=', $submenu_id);
})
->whereHas('types', function ($query) use ($type_id) {
$query->where('types.id', $type_id); // side note: operator '=' is default, so can be ommited
})
->get();
It will run 2 queries ( first for getting appropriate products, second for product details related to them) and return Eloquent Collection