如何从morphMany关联中获取用户收藏项的相关信息?
解决用户收藏项信息的正确获取方式
从你给出的调试信息来看,问题出在你访问的属性不对,咱们一步步理清楚:
首先看你调试的结果:
$activity->subject返回的是Post模型(也就是被收藏的内容本身),但它本身并没有favorited这个关联(favorited是Favorite模型里定义的morphTo关联)- 而
$activity->result返回的是Favorite模型,并且已经预加载了favorited关联(你能看到relations数组里已经包含了对应的Post实例)
所以正确的获取姿势应该从$activity->result入手,而不是$activity->subject。
具体实现步骤
- 在Blade视图中直接访问收藏的内容主体:
{{-- 显示收藏内容的具体内容 --}} {{ $activity->result->favorited->content }}
- 如果需要区分收藏的是帖子还是评论,可以通过类型判断:
@if($activity->result->favorited_type === 'App\Post') <p>用户收藏了帖子:{{ $activity->result->favorited->content }}</p> @elseif($activity->result->favorited_type === 'App\Comment') <p>用户收藏了评论:{{ $activity->result->favorited->content }}</p> @endif
或者用更优雅的类型实例判断方式:
@if($activity->result->favorited instanceof \App\Post) <div class="post-favorite"> <h4>收藏的帖子</h4> <p>{{ $activity->result->favorited->content }}</p> </div> @elseif($activity->result->favorited instanceof \App\Comment) <div class="comment-favorite"> <h4>收藏的评论</h4> <p>{{ $activity->result->favorited->content }}</p> </div> @endif
- 额外检查:确保你的Activity模型的
result关联定义正确,这样才能正确关联到Favorite模型:
// Activity.php public function result() { return $this->morphTo(); }
这样调整后,你就能正确获取到用户收藏的帖子或评论信息了。
内容的提问来源于stack exchange,提问作者Albert A
相关产品推荐
相关产品推荐

