merhabalar;
kendimi geliştirmek adına bir blog sitesi projesi oluşturuyorum projemde kategorilerim ona bağlı alt kategorilerim, alt kategorilere bağlı yazılarım var ve ayriyeten yazılarım bağlı olduğu kullanıcılar var ben kullanıcı profil sayfamda kullanıcılarımın eklemiş olduğu yazıları göstermek istiyorum maalesef ki başaramadım. daha doğrusu kullanıcıma ait 2 adet yazı var ve her yazımı tekli şekilde gösterdiğim single sayfam var her bir yazıda da bağlı olan kullanıcı gösteriliyor kullanıcılarıma sadece single sayfamdan ulaşım sağlıyorum 'a' yazısından kullanıcıma eriştiğim zaman 'a' yazısının bilgilerine aynı kullanıcıya ait 'b' yazısından aynı kullanıcıma eriştiğim zaman sadece b yazısının bilgilerine erişebiliyorum ben kullanıcıma tıkladığım zaman ona ait bütün yazıların gösterilmesini istiyorum nasıl yapabilirim yardımcı olursanız çok minnettar olurum şimdiden teşekkürler.
bu benim controllerim:
namespace App\Http\Controllers\front;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Category;
use App\Models\Article;
use App\Models\User;
use Inertia\Inertia;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index($id)
{
$articles = Article::where('id',$id)->with('User')->get();
$user = Article::where('id', $id)->with('User')->first();
return Inertia::render("sayfalar/profil", [
'user' => $user,
'articles' => $articles,
]);
}
bu benim User modelim:
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Laravel\Jetstream\HasProfilePhoto;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens;
use HasFactory;
use HasProfilePhoto;
use Notifiable;
use TwoFactorAuthenticatable;
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'name',
'email',
'password',
];
public function Articles()
{
return $this->hasMany(Article::class);
}
}
bu benim Article modelim:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
class Article extends Model
{
protected $table = "articles";
use HasFactory;
protected $appends = ['display_created_at'];
public function Category()
{
return $this->belongsTo(Category::class);
}
public function User()
{
return $this->belongsTo(User::class);
}
protected function displayCreatedAt(): Attribute
{
return Attribute::make(
get: fn () => $this->created_at->format('d.m.Y')
);
}
}
bu benim profil.vue sayfam:
<script setup>
import { ref } from "@vue/reactivity";
import { onMounted } from "@vue/runtime-core";
import { useNow, useDateFormat } from "@vueuse/core";
import axios from "axios";
import Darkmode from "darkmode-js";
defineProps({
user: [Array],
adet: [Array],
articles: [Array],
});
const categories = ref([]);
const currentTime = {
date: useDateFormat(useNow(), "DD-MMMM-YYYY"),
time: useDateFormat(useNow(), "HH:mm"),
};
new Darkmode().showWidget();
const getCategories = async () =>
await axios.get(route("getCategories")).then((res) => {
categories.value = res.data.data;
});
onMounted(() => {
getCategories();
});
console.log(categories.value);
</script>
<template>
<div class="flex items-start h-[700rem] w-full p-4 bg-slate-300">
<!-- Header -->
<div
class="flex justify-between w-[70rem] ml-[30rem] rounded-lg bg-white"
>
<!-- Left Side -->
<div class="px-4">
<!-- Logo -->
<div class="flex items-center space-x-4">
<div class="grid grid-cols-2 w-8 h-8 shrink-0 mt-7">
<template v-for="i in 4" :key="i">
<font-awesome-icon
icon="fa-solid fa-circle"
size="xs"
/>
</template>
</div>
<div class="flex h-auto w-20 mt-7">
<img
src="https://blogger.googleusercontent.com/img/a/AVvXsEh71KXefk3tb6WpzgdsyEsOVvYWU-vxt3oMVxtso9BAxiJe_KJiXL9N28F1MPUcN4WschopH--BGKCcq5A11ooVvKtImLyNRBTyfVJ98IOlRzs-pElqmobJLrQORaTb1hvJL8ljPB4UMAi_zyTUEK7djIxN7HlIM3hcq1oNXZtqepoHnVbJcPaTp-bN=s132"
/>
</div>
</div>
<!-- Menu -->
<div class="flex justify-start space-x-8 select-none">
<template v-for="category in categories">
<div
class="relative flex flex-col group py-1 ml-[15rem]"
v-if="!category.category_id"
>
<!-- Main Category -->
<div class="bg-red-300">
<span>
{{ category.name }}
<font-awesome-icon
icon="fa-solid fa-chevron-down"
/>
</span>
</div>
<!-- Sub Category -->
<div
v-if="category.sub_categories.length > 0"
class="absolute flex flex-col top-8 space-y-2 rounded-lg bg-slate-200 p-2 invisible group-hover:visible w-[73rem] h-56 z-50"
>
<template
v-for="sub in category.sub_categories"
>
<span
class="whitespace-nowrap transition hover:bg-slate-300 px-2 py-1 rounded-lg cursor-pointer mt-7 z-50"
>{{ sub.name }}
<font-awesome-icon
icon="fa-solid fa-arrow-right-long"
/>
<br />
<br />
</span>
</template>
</div>
</div>
</template>
</div>
</div>
<!-- Right Side -->
<div class="flex items-center justify-center text-slate-700">
<!-- Clock Icon -->
<div class="p-4 border-r border-slate-300">
<font-awesome-icon icon="fa-solid fa-clock" size="2x" />
</div>
<div class="flex flex-col items-center px-2">
<span
v-text="currentTime.date.value"
class="font-bold"
></span>
<span v-text="currentTime.time.value"></span>
</div>
</div>
</div>
<!-- content -->
<div
class="absolute bg-white mt-44 ml-[30rem] w-[65rem] rounded-lg h-[70rem]"
>
<template v-for="use in user">
<div>
<div
class="absolute z-20 text-center w-full mt-5 font-serif font-bold text-2xl"
>
{{ use.name }}
</div>
<img
:src="use.image"
class="w-[70rem] mt-20 absolute h-96"
/>
</div>
<div class="absolute mt-[30rem] font-serif">
Ad Soyad : {{ use.name }}
</div>
<div class="absolute mt-[32rem] font-serif">
Email : {{ use.email }}
</div>
<div class="absolute mt-[34rem] font-serif">
Şifre : {{ use.password }}
</div>
</template>
<template v-for="article in articles">
{{ article.title }}
</template>
</div>
</div>
</template>
Route:
Route::get('/profil/{id}', [\App\Http\Controllers\Front\UserController::class, 'index'])->name('profil','*');