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

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

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');
}
}

0

Решение

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

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

Приложение / Comment.php

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

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

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

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

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


Чтобы узнать больше об этом, проверьте документация.

1

Другие решения

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

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

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector