Performance and correctness of selecting only most recent entries across joined tables
Something like this:

SELECT purchases.id AS purchase_id, thing_id, purchase_date, name, predicted_replace_days, product_image, barcode
FROM (
    SELECT thing_id, MAX(purchase_date) pd
    FROM purchases
    GROUP BY thing_id   
) AS sub
JOIN purchases ON purchases.id = sub.thing_id and sub.pd=purchase_date
INNER JOIN things on thing_id = things.id
WHERE user_id = 1