Различие, которое затушевывают другие ответы, заключается в использовании конструктора запросов и использования коллекции. Когда вы вызываете отношение с помощью свойства, Eloquent извлекает все результаты, а затем возвращает коллекцию (которая в основном представляет собой расширенный массив). Итак, когда вы делаете
auth()->user()->actionables
Laravel выполняет SQL-запрос, а затем возвращает все результаты в виде коллекции.
SELECT * FROM actionables WHERE owner_id = ?
В классе коллекции есть метод where
, который работает аналогично методу построителя запросов, но важно понимать, что он выполняет поиск в PHP, а не в SQL, потому что запрос уже выполнен и больше не может быть изменен. latest()
существует в построителе запросов, но не в коллекции, из которой исходит ваша ошибка.
Чтобы использовать взаимосвязь в построителе запросов, вам нужно вызвать связь как функцию. user()->actionables()
auth()->user()->actionables()->where('act_type', 'order')->latest()->first()
Приведенный выше запрос выполнит SQL-запрос и вернет только ту запись, которую вы ищете.
SELECT * FROM actionables WHERE act_type = order AND WHERE owner_id = ? ORDER BY created_at DESC LIMIT 1