У меня есть сводная таблица post_profil
e, которая содержит сердечки (лайки) каждого сообщения.
Сообщение. php
namespace 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);
}
}
Профиль. php
namespace 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);
}
}
Основной вид, в котором отображаются все сообщения подписанных пользователей, работает вместе с кнопкой в виде сердечка, но под ним я хочу показать понравилось и 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 l oop и проверяется, каждый ли $post->heartedProfiles(contains($users))
, но это не работает таким образом. Таким образом, я попробовал еще один способ, на мой взгляд ie, 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 и понял основы. Все, что мне нужно, это дать мне какую-то идею, чтобы начать работу.