У меня есть несколько моделей, таких как Пользователь, Публикация, Комментарий и т. Д.
В User у меня есть:
public function posts()
{
return $this->hasMany('Post');
}
Я могу получить первое сообщение через $customer->posts()->first()
, но что, если я хочу получить последнее сообщение? Как я вижу, нет last ().
Это дополнительно усугубляется отношением hasManyThrough (к сожалению, мы унаследовали дурацкую схему):
public function comments()
{
return $this->hasManyThrough('Comment', 'Post');
}
Если я попытаюсь выполнить $this->comments()->orderBy('comments.id', 'desc')->first();
, он вернет объект User ??
2 ответа
Не это
// User model
$this->comments()->orderBy('comments.id', 'desc')->first();
Не вернет модель User
.
И чтобы получить то, что вы просили, просто сделайте следующее:
$customer->posts()->latest()->first();
Вы сказали There is no last() as I can see
, но на самом деле существует также метод last()
, поэтому вы можете использовать его так:
$customer->posts->last();
Обратите внимание, что это не $customer->posts()->last()
, как вы использовали в своем примере, используя first()
.
latest()
работает, только если в вашей таблице есть столбец created_at
.
latest()
без параметра использует поле 'created_at'
, но можно использовать ЛЮБОЕ поле даты, передав его, например: latest('your_date_field')
Похожие вопросы
Новые вопросы
php
PHP — это широко используемый язык сценариев общего назначения с открытым исходным кодом, мультипарадигмальный, динамически типизированный и интерпретируемый, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.
$this->comments()->orderBy('id', 'desc')->first();
?