如果我的评论表中只有他们的 ID,我还能以某种方式获取对图像发表评论的人的用户名吗
Posted
技术标签:
【中文标题】如果我的评论表中只有他们的 ID,我还能以某种方式获取对图像发表评论的人的用户名吗【英文标题】:Can I somehow also get the usernames of the people who have commented on an image if I only have their ids in my comments table 【发布时间】:2019-05-19 08:36:12 【问题描述】:我的 cmets 表有以下列:
id, user_id, image_id, comment
目前我正在获取属于特定图像的所有 cmets,如下所示:
$comments = Comment::where('image_id', $id)->get();
然后我可以轻松地在我将 $comments
变量传递到的视图上显示 cmets。但是,我只能显示发布评论的用户的 ID,但这没有多大意义,所以我试图显示用户名。
由于我没有保存在 cmets 表中发表评论的用户的用户名,因此我目前无法从 $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');
【问题讨论】:
【参考方案1】:我猜你应该有一个User
对象的表/模型。
如果是这样,您可以Eager Load 关系。为此,请在模型中定义关系:
app/Comment.php
public function users()
return $this->belongsTo(User::class);
注意:鉴于这是
hasMany
关系 (belongsTo
) 的反面,您应该将此函数命名为单数:Comment
属于唯一的User
。
然后在你的控制器中:
$comments = Comment::with('users')->where('image_id', $id)->get();
这将在每个comment
中包含user
对象。当然,你可以限制返回给视图的用户属性,但你懂的。
要了解更多信息,请查看documentation。
【讨论】:
我正在努力让它工作,但我可能做错了什么。我也将我的模型添加到我的问题中。我相信我已经完成了关系。如果一切都正确完成,我将如何在刀片视图中访问作者? 我已经更新了我的回复中的关系以匹配你的。 @bobimaru 你这样做:$comments->first() ->users->name
在执行 $comment->users->username
之后,我不断收到“尝试获取非对象的属性‘用户名’”。 $comment 是单数的,因为它在 foreach 循环中 同样在 dd($cmets) 之后,我看到了 #relations: array:1 [▼ "users" => null ]。我认为这可能与问题有关。 @Bobimaru$comment->users
是对象的集合或数组。应该尝试使用$comment->users[0]->username
。【参考方案2】:
进行类似的连接以连接两个表!
$comments = DB::table('comment')
->join('user', 'comment.user_id', '=', 'user.id')
->select('comment.*', 'user.name')
->where(image_id, $id)
->get();
一个具有雄辩细节的相关问题 How to join three table by laravel eloquent model
【讨论】:
您需要在您的评论实体中定义多对多关系以默认链接到用户laravel.com/docs/5.7/eloquent-relationships 我的用户模型与 cmets 有一个 hasMany 关系,我的评论模型与用户有一个 belongsTo 关系。是这个意思吗? 你的 cmets 没有属于他们的用户对象的属性吗?如果您的模型包含给定的关系,那么对于评论,您应该能够访问 comment->user->name以上是关于如果我的评论表中只有他们的 ID,我还能以某种方式获取对图像发表评论的人的用户名吗的主要内容,如果未能解决你的问题,请参考以下文章
你能以编程方式访问当前的 Heroku dyno id/name 吗?
我能以某种方式从 UIPageViewController 获取 scrollViewDidScroll: UIScrollView Delegate 方法吗?
我能以某种方式在第一个“then”中获得 fetch 响应吗?
libgdx- pixmap:我能以某种方式改变线条的宽度吗?