ORM has two methods of data retrieval, get() and get_one(). The find() method uses both, depending on the question asked. 'all' for example uses get(), 'first' uses get_one().
get_one() returns a single model object, or null if nothing was found. get() returns an array of objects, or an empty array if nothing was found.
This is why, in your above example, $query->id doesn't work. You ask for 'all', so you can get a list of thousands of ojbects, each with an id. So obviously you need to iterate over the list.
If you want a single object, ask a question that returns one. So either find() with 'first', 'last' or with a primary key, or query() with get_one().