Могу ли я как-то также получить имена пользователей, которые прокомментировали изображение, если у меня есть только их идентификаторы в моей таблице комментариев - PullRequest
0 голосов
/ 19 декабря 2018

Моя таблица комментариев имеет следующие столбцы:

id, user_id, image_id, comment

В настоящее время я получаю все комментарии, которые относятся к определенному изображению, например:

$comments = Comment::where('image_id', $id)->get();

И тогда я легко могуотобразить комментарии к представлению, которому я передаю переменную $comments.Однако я могу отображать только идентификатор пользователя, который разместил комментарий, но это не имеет особого смысла, поэтому я пытаюсь отобразить имя пользователя.

Поскольку я не сохраняю имя пользователя, который оставил комментарий в таблице комментариев, я не могу получить к нему доступ с $comments на данный момент.Есть ли способ как-то добавить дополнительную пару ключ-значение к $comments, которая будет содержать имя пользователя на основе его id?

Модель комментария:

class Comment extends Model
{
    public function images(){
        return $this->belongsTo('App\Image');
    }

    public function users(){
        return $this->belongsTo('App\User');
    }
}

Модель пользователя:

class User extends Model implements Authenticatable
{
public function comments(){
        return $this->hasMany('App\Comment');
    }
}

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Я предполагаю, что у вас должна быть таблица / модель для User объектов.

Если это так, вы можете Eager Load взаимосвязь.Для этого определите отношение в вашей модели:

app / Comment.php

public function users()
{
    return $this->belongsTo(User::class);
}

Примечание: учитывая, что это обратноеhasMany отношение (belongsTo), вы должны назвать эти функции в единственном числе: a Comment принадлежит уникальный User.

Тогда в вашем контроллере:

$comments = Comment::with('users')->where('image_id', $id)->get();

Это будет включать в себя объект user внутри каждого comment.Конечно, вы можете ограничить пользовательские атрибуты, возвращаемые представлению, но у вас есть идея.


Чтобы узнать больше об этом, ознакомьтесь с документацией .

0 голосов
/ 19 декабря 2018

Сделайте соединение похожим, чтобы соединить обе таблицы!

 $comments = DB::table('comment')
        ->join('user', 'comment.user_id', '=', 'user.id')
        ->select('comment.*', 'user.name')
        ->where(image_id, $id)
        ->get();

Смежный вопрос с красноречивой спецификой Как объединить три таблицы с помощью красноречивой модели laravel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...