會員的登入註冊處理好之後,接著我們來處理文章在資料庫裡面的各種操作。
基本上,Laravel 針對資料庫的操作方式,沒什麼太大的改變,想學的朋友可以參考之前的文章
值得注意的一個小地方,是我們現在 make:model
的時候
./vendor/bin/sail artisan make:model Post
Model 不再是放在 app/
底下,而是 app/Models
底下了!算是一個小調整
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
}
針對 Soft Delete 的部分,除了之前的文章 [Day 20] 刪除文章但是不刪除資料!聊 Soft Delete 提到的內容,Laravel 還加入了一個新功能:Pruning!
簡單的說,在過去,要清理掉被 Soft Delete 的文章,需要自己手動寫判斷邏輯,比方說被刪除超過一個月的資料,或者被建立超過一個月的資料,並自己撰寫排程定期清理。
現在的話,可以透過 Laravel 8 開始提供的 Illuminate\Database\Eloquent\Prunable
這個 trait,來幫助我們處理這段邏輯!
我們來看看怎樣使用
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Prunable;
class Post extends Model
{
use Prunable;
/**
* Get the prunable model query.
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function prunable()
{
return static::where('created_at', '<=', now()->subMonth());
}
}
只要這樣,我們就可以標記 Post
只要建立時間超過一個月,就是屬於「可被清掉的」。
然後,我們再利用 App\Console\Kernel
裡面的 schedule()
/**
* Define the application's command schedule.
*
* @param \Illuminate\Console\Scheduling\Schedule $schedule
* @return void
*/
protected function schedule(Schedule $schedule)
{
// $schedule->command('inspire')->hourly();
$schedule->command('model:prune')->daily();
}
就可以每天清理掉多餘的資料了!
如果希望資料被清理時,要同時做一些附加的動作,比方說清理掉對應的文章圖片,可以定義在 Model 的 pruning()
事件裡面
/**
* Prepare the model for pruning.
*
* @return void
*/
protected function pruning()
{
}
今天有關資料清理的部分,就分享到這邊,我們明天見!