Отношения не возвращают никаких данных - PullRequest
0 голосов
/ 11 января 2019

Я создаю систему форумов с лайками постов, но по какой-то причине отношения для лайков сообщений не возвращают никаких данных.

Я попытался загрузить данные без ресурса и включил их в ('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

1 Ответ

0 голосов
/ 11 января 2019

Я упустил из виду тот факт, что он вызывал App\PostLike, а внешний и локальный ключи были в неправильном порядке.

Определение метода:

 public function hasMany($related, $foreignKey = null, $localKey = null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...