Saya punya dua tabel/model User
dan Post
di Laravel, dimana tabel Post berisi kolom user_id
yang mengarah ke tabel User kolom id
, setiap User bisa memiliki banyak Post.
Saya ingin mengambil semua postingan untuk user yang sedang login saat ini, sempat kepikiran ngambil post berdasarkan id user Auth::user()->id
tapi saya masih bingung apa yang harus saya lakukan berikutnya, ini kode yang saya pakai:
class PostController extends Controller
{
public function index(Request $request): View
{
$userId = Auth::user()->id;
$posts = []; // bagaimana cara mendapatkan posts?
return view('posts', [
'posts' => [],
]);
}
}
Ada beberapa cara.
Cara pertama, gunakan model Post
untuk mencari semua postingan berdasarkan user_id
yang sedang login seperti ini:
use App\Models\Post;
class PostController extends Controller
{
public function index(Request $request): View
{
$userId = Auth::user()->id;
$posts = Post::where('user_id', $userId)->get();
return view('posts', [
'posts' => $posts,
]);
}
}
Cara kedua, tambahkan method (misalnya posts()
) yang berelasi ke model User
, seperti ini:
use Illuminate\Database\Eloquent\Relations\HasMany;
class User extends Authenticatable
{
// ...
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
}
Di Controller kita bisa panggil method yang telah ditambahkan untuk mengambil posts yang dimiliki user yang sedang login, seperti ini:
class PostController extends Controller
{
public function index(Request $request): View
{
$posts = Auth::user()->posts()->get();
return view('posts', [
'posts' => $posts,
]);
}
}
Kamu tau jawabannya?
Ayo bergabung bersama lebih dari 200.000 pengguna lainnya!