为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 在视图上获取类而不从控制器传递

Laravel 在视图上获取类而不从控制器传递

PHP
慕哥9229398 2023-08-06 14:49:04
我有一个数据透视表post_profile,其中包含每个帖子的心(喜欢)。帖子.phpnamespace App;use Illuminate\Database\Eloquent\Model;class Post extends Model{    protected $guarded = [];    public function user()    {       return $this->belongsTo(User::class);    }    public function profilesHearted()    {        return $this->belongsToMany(Profile::class);    }}配置文件.phpnamespace App;use Illuminate\Database\Eloquent\Model;class Profile extends Model{    protected $guarded = [];        public function profileImage()    {        $imagePath = ($this->image) ? $this->image : 'profile/czyhBQu2YWX6gvBivZrnEs2ORoBwr3d9mzkwxk8k.png';        return $imagePath;     }    public function followers()    {        return $this->belongsToMany(User::class);    }    public function heartedPosts()    {        return $this->belongsToMany(Post::class);    }    public function user()    {        return $this->belongsTo(User::class);    }}显示关注用户的所有帖子的主视图与心形按钮一起工作,但在下面我想显示<x> 和其他 30 个人的喜欢,x如果用户的任何关注者喜欢该帖子,则该用户的第一个关注者在哪里。我尝试了很多方法,x但我有点迷失。这是PostsController.php指向视图的索引函数:public function index(){    $users = auth()->user()->following()->pluck('profiles.user_id');    $posts = Post::whereIn('user_id', $users)->with('user')->latest()->paginate(5);    return view('posts.index', compact('posts', 'users' ));}我试图做但最终在失败后删除的是获取 foreach 循环中的每个帖子并检查每个帖子$post->heartedProfiles(contains($users)),但这不起作用。所以我认为我尝试的另一种方法是,index.blade.php@foreach($users as $userid)    User::select('id')->where('profile_id', $userid)->first()        ->profile->profilesHearted->find($post->id)@endforeach这是行不通的,因为User类不能在不传递的情况下直接在视图中使用。我确信 Laravel 中有一种简单且干净的方法可以做到这一点。这是我第一次使用 Laravel 和 ORM 编程,所以真的感到失落。学习了 FreeCodeCamp Instagram 克隆教程并了解了基础知识。我所需要的只是给我一些开始的想法。
查看完整描述

1 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

当处理多对多时,你需要使用枢轴函数,所以你会这样做

Post::profilesHearted()->wherePivotIn('profile_id', $users)->first()

没有检查代码,但希望它能给你这个想法。


查看完整回答
反对 回复 2023-08-06
  • 1 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信