Skip to content

Commit 0f154eb

Browse files
committed
create pivot table tags with news
1 parent e1ec378 commit 0f154eb

File tree

13 files changed

+106
-38
lines changed

13 files changed

+106
-38
lines changed

app/Http/Controllers/AdministrationController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public function posts() {
2222
}
2323

2424
public function news() {
25-
$news = News::all();
25+
$news = News::latest()->get();
2626
return view('/admin.news', compact('news'));
2727
}
2828
}

app/Http/Controllers/NewsController.php

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public function validateRequest($request, $new)
1818

1919
public function index()
2020
{
21-
$news = News::all();
21+
$news = News::with('tags')->latest()->get();
2222
return view('news.index', compact('news'));
2323
}
2424

@@ -37,32 +37,32 @@ public function store(Request $request)
3737
return back();
3838
}
3939

40-
public function show(News $news)
40+
public function show(News $new)
4141
{
42-
return view('news.show', compact('news'));
42+
return view('news.show', compact('new'));
4343
}
4444

45-
public function edit(News $news)
45+
public function edit(News $new)
4646
{
47-
return view('news.edit', compact('news'));
47+
return view('news.edit', compact('new'));
4848
}
4949

50-
public function update(Request $request, News $news)
50+
public function update(Request $request, News $new)
5151
{
52-
$values = $this->validateRequest($request, $news);
52+
$values = $this->validateRequest($request, $new);
5353

54-
$news->update($values);
54+
$new->update($values);
5555
flash( 'New updated successfully');
5656

5757
return back();
5858
}
5959

60-
public function destroy(News $news)
60+
public function destroy(News $new)
6161
{
62-
$news->delete();
62+
$new->delete();
6363

6464
flash( 'New deleted successfully');
6565

66-
return back(0);
66+
return back();
6767
}
6868
}

app/NewTag.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php
2+
3+
namespace App;
4+
5+
use Illuminate\Database\Eloquent\Relations\Pivot;
6+
7+
class NewTag extends Pivot
8+
{
9+
protected $table = 'new_tag';
10+
}

app/News.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,9 @@ class News extends Model
1010
use HasFactory;
1111

1212
protected $guarded = [];
13+
14+
public function tags()
15+
{
16+
return $this->belongsToMany(Tag::class, 'new_tag', 'new_id', 'tag_id');
17+
}
1318
}

app/Tag.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ public function posts()
1818
return $this->belongsToMany(Post::class);
1919
}
2020

21+
public function news()
22+
{
23+
return $this->belongsToMany(News::class, 'new_tag', 'tag_id', 'new_id');
24+
}
25+
2126
public function getRouteKeyName()
2227
{
2328
return 'name';
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
class CreateNewTagTable extends Migration
8+
{
9+
public function up()
10+
{
11+
Schema::create('new_tag', function (Blueprint $table) {
12+
$table->foreignId('new_id')->constrained('news')->onDelete('Cascade');
13+
$table->foreignId('tag_id')->constrained('tags')->onDelete('Cascade');
14+
15+
$table->primary(['new_id', 'tag_id']);
16+
});
17+
}
18+
19+
public function down()
20+
{
21+
Schema::dropIfExists('new_tag');
22+
}
23+
}

database/seeds/DatabaseSeeder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class DatabaseSeeder extends Seeder
1515
*/
1616
public function run()
1717
{
18-
$this->call(\Database\Seeders\UsersTableSeeder::class);
1918
$this->call(\Database\Seeders\NewsTableSeeder::class);
19+
$this->call(\Database\Seeders\UsersTableSeeder::class);
2020
}
2121
}

database/seeds/NewsTableSeeder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ class NewsTableSeeder extends Seeder
1414
*/
1515
public function run()
1616
{
17-
News::factory()->count(4)->create();
17+
News::factory()->count(4)->hasTags(2)->create();
1818
}
1919
}

database/seeds/UsersTableSeeder.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Database\Seeders;
44

5+
use App\News;
56
use App\Permission;
67
use App\Post;
78
use App\Role;
@@ -43,5 +44,11 @@ public function run()
4344
});
4445
})
4546
;
47+
48+
$news = News::all();
49+
50+
foreach ($news as $new) {
51+
$new->tags()->attach($tags->random(random_int(0,1)));
52+
}
4653
}
4754
}

resources/views/admin/news.blade.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
@section('content')
88
<main class="py-4" style="min-height: 88vh">
99
<div class="container">
10-
<section class="news-section news mb-2">
11-
<h2 class="news__header">News</h2>
10+
<section class="news-section news mb-2 row">
11+
<h2 class="news__header col-12 order-2 order-sm-0">News</h2>
1212

13-
<div class="news-section__news new row flex-wrap">
13+
<div class="news-section__news new col-sm-8 col-lg-10 order-2 order-sm-0">
1414
@forelse($news as $new)
1515
<div class="new__item d-flex col-md-6 ">
16-
<div class="new__heading d-flex flex-column p-3 border rounded mb-4 shadow-sm">
16+
<div class="new__heading d-flex flex-column p-3 w-100 border rounded mb-4 shadow-sm">
1717
<strong class="mb-2 text-primary">new #{{ $new->id }}</strong>
1818

1919
<h3 class="new__name mb-0">{{ $new->name }}</h3>
@@ -22,7 +22,15 @@
2222

2323
<p class="new__preview card-text flex-grow-1 text-justify"> {{ str_limit($new->text, $limit = 200, $end = '...') }} </p>
2424

25-
<div class="d-flex justify-content-end">
25+
@if($new->tags->isNotEmpty())
26+
<div class="post__tags mb-2">
27+
@foreach($new->tags as $tag)
28+
<span class="badge badge-info text-white">{{ $tag->name }}</span>
29+
@endforeach
30+
</div>
31+
@endif
32+
33+
<div class="new__actions d-flex justify-content-end">
2634
<a href="{{ route('news.show', $new) }}" class="btn btn-outline-secondary" style="width: 80px; font-size: 0.7rem">Read</a>
2735

2836
<a href="{{ route('news.edit', $new) }}" class="btn btn-outline-secondary mx-1" style="width: 80px; font-size: 0.7rem">Edit</a>
@@ -33,8 +41,6 @@
3341

3442
<button type="submit" class="btn btn-outline-secondary" style="width: 80px; font-size: 0.7rem">Delete</button>
3543
</form>
36-
37-
{{-- <a href="{{ route('news.destroy', $new) }}" class="btn btn-outline-secondary ml-1" style="width: 80px; font-size: 0.7rem">Delete</a>--}}
3844
</div>
3945
</div>
4046
</div>

0 commit comments

Comments
 (0)