Настройка связанных столбцов в Laravel API

#laravel #eloquent #laravel-8

#laravel #eloquent #laravel-8

Вопрос:

У меня есть источник api, который я объединил в связанные таблицы. Я настроил объекты, но не могу настроить связанные с ними данные. Как мне это сделать?

Предыдущий вывод:

 {
    "id": 1,
    "user_id": 3,
    "image": "https://localhost/800/400/cats/varem/?20215",
    "description": "Omnis eius corporis incidunt illo dolor et est odio. Et fuga hic id. Velit voluptas tempore quas voluptas iusto. Quia rerum quibusdam consectetur distinctio vero. Nihil et sed reiciendis sequi. Possimus facere ducimus provident est. Qui ut rerum ab ullam sequi est. In placeat nesciunt odio numquam iure.",
    "created_at": "2017-09-18T10:51:17.000000Z",
    "updated_at": "2020-12-25T08:55:40.000000Z",
    "likes": [
      {
        "id": 7,
        "user_id": 10,
        "post_id": 1,
        "created_at": "1970-03-31T14:17:28.000000Z",
        "updated_at": "2020-12-25T08:55:40.000000Z"
      }
    ]
  }
 

Функция:

 public function like_show($id) {
         return Posts::selectRaw('id as post_id, user_id, image as post_image, description as post_description, created_at')
             ->with('likes')
             ->where('user_id', '=', $id)
             ->get();
    }
 

Следующий вывод:

 {
    "post_id": 1,
    "user_id": 3,
    "post_image": "https://localhost/800/400/cats/varem/?20215",
    "post_description": "Omnis eius corporis incidunt illo dolor et est odio. Et fuga hic id. Velit voluptas tempore quas voluptas iusto. Quia rerum quibusdam consectetur distinctio vero. Nihil et sed reiciendis sequi. Possimus facere ducimus provident est. Qui ut rerum ab ullam sequi est. In placeat nesciunt odio numquam iure.",
    "created_at": "2017-09-18T10:51:17.000000Z",
    "likes": [
      
    ]
  }
 

Вывод, который я хочу:

 {
    "post_id": 1,
    "user_id": 3,
    "post_image": "https://localhost/800/400/cats/varem/?20215",
    "post_description": "Omnis eius corporis incidunt illo dolor et est odio. Et fuga hic id. Velit voluptas tempore quas voluptas iusto. Quia rerum quibusdam consectetur distinctio vero. Nihil et sed reiciendis sequi. Possimus facere ducimus provident est. Qui ut rerum ab ullam sequi est. In placeat nesciunt odio numquam iure.",
    "created_at": "2017-09-18T10:51:17.000000Z",
    "likes": [
      "like_id": 3,
      "user_id": 10,
      "post_id": 1,
    ]
  }
 

Комментарии:

1. Это неполный вопрос, пожалуйста, приведите пример ожидаемого результата.

2. вам нужно добавить, чтобы выбрать лайки.

3. Можете ли вы сказать мне, как его добавить?

4. вы пробовали likes.like_id или что-то в этом роде? или любит.*

5. Да, я пытался, но это выдает ошибку:(

Ответ №1:

alihan.dev, вам нужно создать Likes collection и Likes api resource и опубликовать сообщение с лайками, тогда следующий код будет работать для вас :).

 class Posts extends JsonResource {
    
    //likes is relationship 
    
     public function toArray($request) {
    
            return  [
                'group_id' => $this->group_id,
                'u_t_id' => $this->u_t_id,
                'group_by' => $this->group_by,
                'likes' =>Likes::collection($this->likes),
               
            ];
    
    }
    
    
    }
 

Комментарии:

1. Спасибо за ваш комментарий. Я пытаюсь выяснить, как это сделать, не используя ресурс Json.

2. затем вам нужно определить отношение к вашим лайкам внутри selectRaw. Posts::selectRaw(‘идентификатор как post_id, user_id, изображение как post_image, описание как post_description, created_at, likes.like_id,likes.user_id’,likes.post_id,)