Я создаю систему форумов с лайками постов, но по какой-то причине отношения для лайков сообщений не возвращают никаких данных.
Я попытался загрузить данные без ресурса и включил их в ('all_likes'), но это все равно не возвращает данные.
Мой метод получения сообщений:
public function getPosts($id)
{
$response = array();
$response['posts'] = ForumPostResource::collection(ForumPost::where('thread_id', $id)->get());
return $response;
}
Мой ресурс на форуме:
class ForumPostResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'user_id' => $this->user_id,
'thread_id' => $this->thread_id,
'body' => $this->body,
'like_data' => $this->all_likes,
'user_data' => new UserResource($this->user),
'created_at' => $this->created_at,
'updated_at' => $this->updated_at
];
}
}
Моя модель поста на форуме:
class ForumPost extends Model
{
protected $fillable = [
'user_id', 'thread_id', 'body', 'likes', 'created_at', 'updated_at',
];
protected $appends = ['likes_total', 'user_data'];
public function user()
{
return $this->belongsTo('App\User');
}
public function all_likes()
{
return $this->hasMany('App\PostLike', 'id', 'post_id');
}
public function getCreatedAtAttribute($value)
{
return date('D, d F Y G:i', strtotime($value));
}
public function getUserDataAttribute()
{
return $this->user()->first();
}
public function getLikesTotalAttribute()
{
return $this->all_likes()->count();
}
}
Как только вы нажмете кнопку «Мне нравится», идентификатор пользователя и идентификатор записи будут добавлены в базу данных post_likes. Затем при загрузке представления, отображающего все сообщения форума, включая данные об отношениях лайков.
Результат, который я получаю, таков:
{
"posts": [
{
"id": 14,
"user_id": 1501,
"thread_id": 3,
"body": "<p>Welcome everyone</p>",
"like_data": [],
"user_data": {
"name": "mikelmao",
"role_id": 1,
"avatar": "users/default.png"
},
"created_at": "Sat, 05 January 2019 13:04",
"updated_at": {
"date": "2019-01-11 03:22:27.000000",
"timezone_type": 3,
"timezone": "UTC"
}
}
]
}
Это должно возвращать 1 сообщение как результат, так как мой БД выглядит так:
идентификатор | user_id | post_id
1 | 1501 | 14