iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 30
0
自我挑戰組

來用Laravel做點什麼吧系列 第 30

D30 超簡易版FB - 給愛心(X

其實就按讚功能,出乎意料的⋯⋯難。

參考資料:【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

截圖證明這玩意兒真的能跑

很不心得的30天心得

哇嗚今天是最後一天啦wwwwwwwwww

但我還是沒寫完。

當初規劃時間表時我還想了另外一個坑,怕時間太多可以拿來繼續寫,現在想想,我好傻好天真。我覺得我連Laravel的腳腳都還沒摸到QQ

總之感謝大家看我寫的東東QQ

我、我繼續努力啊QQ


上一篇
D29 超簡易版FB - 搜尋
系列文
來用Laravel做點什麼吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言