@rodrigo.pedra hmm, maybe I've found a bug then?
I did actually try something along the lines of your second example but then when you continue to eager load in nested resources, it does it based on the joined table's ids instead of the proper table.
Example:
Let's assume for the example that you also want to eager load the table parts (assume for this example that each part belongs to 1 car and each car can have many parts)
The query would look like this, right?
$user->load(['cars' => function($query)
{
$query->join('colours', 'cars.colour_id', '=', 'colours.id')->orderBy('colours.name');
}, 'cars.parts']);
The resulting query for parts would use the car_id foreign key on the parts table, but in the WHERE IN clause it would provide the colour ids rather than the cars ids. Weird?
Can anyone else replicate this behaviour or did I do something wrong?