Запросы для извлечения данных отношений в laravel - PullRequest
2 голосов
/ 13 марта 2020

Я получаю сообщение с указанным идентификатором тега c, и у меня пока есть следующий код.

public static function getPostByTag($id) {
    return Tag::with('posts')->whereHas('posts', function($q) use(&$id) {
      $q->where('tags.id',$id);
    })->get();
}

Данные, которые я получаю, до сих пор работают отлично, но сейчас я хочу ограничить данные. Что я должен сделать, чтобы ограничить данные?

Я пробовал следующее:

public static function getPostByTag($id) {
    return Tag::with('posts')->whereHas('posts', function($q) use(&$id) {
      $q->where('tags.id',$id);
    })->take(5)->get();
}

Но, похоже, это не работает. Кроме того, я хочу разместить свой пост в соответствии с последней датой.

Ответы [ 3 ]

1 голос
/ 13 марта 2020

Кажется, вы хотите получить сообщение по tag_id, вы можете просто использовать Tag::where('id', $id)

Если вы хотите получить последние сообщения, вы можете использовать ->latest() метод, он будет автоматически упорядочен по created_at des c.

И вы хотите ограничить количество сообщений, вам нужно ограничить его в with закрытие:

public static function getPostByTag($id){
    return Tag::where('id', $id)->has('posts')
              ->with(['posts' => function($q) {
                 $q->latest()->limit(5);
              }])->get();
}
0 голосов
/ 13 марта 2020
public static function getPostByTag($id){
    return Tag::with(['posts' => function($q) {
        $q->orderBy('created_at', 'DESC')->take(5);
    }])->whereHas('posts', function($q) use(&$id){
               $q->where('tags.id',$id);
    })->get();
}
0 голосов
/ 13 марта 2020

Вам необходимо сделать следующее:

public static function getPostByTag($id){
    return Tag::whereHas('posts', function($q) use(&$id){
        $q->where('tags.id',$id);
    }->with(['posts' => function($q) {
        $q->orderBy('created_at', 'DESC')->take(5);
    }])->get();
}
...