其實就按讚功能,出乎意料的⋯⋯難。
參考資料:【laravel】点赞功能 - jack19941215的博客 - CSDN博客
Route:
Route::post('like/{id}', 'UserController@like')->name('like');
Route::post('unlike/{id}', 'UserController@unlike')->name('unlike');
Model:
// Post.php
class Post extends Model
{
protected $table = 'posts';
public function like($user_id)
{
return $this->hasOne('App\Like', 'post_id')->where('user_id' , $user_id);
}
}
定義Post跟Like的一對一關係。
// Like.php
class Like extends Model
{
protected $table = 'likes';
protected $fillable = ['post_id', 'user_id'];
}
$fillable
設定可以批量賦值的欄位。
Controller:
// UserController.php
public function like($id)
{
$heart = [
'post_id' => $id,
'user_id' => Auth::user()->id
];
Like::firstOrCreate($heart);
return back();
}
public function unlike(Post $post)
{
$post->Post::like(Auth::user()->id)->delete();
return back();
}
為了讓Post Model中的like
方法可以被使用,所以修改了User Controller裡面的show方法的查詢:
$post = Post::leftJoin('users', 'posts.user_id', '=', 'users.id')
->orderBy('posts.post_id', 'DESC')
->get();
一如既往(?)的在Home View中引用子視圖like.blade.php
:
<div>
@if($post->like(Auth::user()->id)->exists())
<form method="POST" action="{{ route('unlike', $post->post_id) }}">
@csrf
<button class="btn btn-primary">取消</button>
</form>
@else
<form method="POST" action="{{ route('like', $post->post_id) }}">
@csrf
<button class="btn btn-primary">讚</button>
</form>
@endif
</div>
However,雖然寫了取消功能,但只能點讚不給取消XDDDDDDDDDD
截圖證明這玩意兒真的能跑
哇嗚今天是最後一天啦wwwwwwwwww
但我還是沒寫完。
當初規劃時間表時我還想了另外一個坑,怕時間太多可以拿來繼續寫,現在想想,我好傻好天真。我覺得我連Laravel的腳腳都還沒摸到QQ
總之感謝大家看我寫的東東QQ
我、我繼續努力啊QQ