我有articles這些列的表id, title, details, slug,在我的 Laravel 遷移中,默認值可以設定為:
$table->string('slug')->default('value');
有沒有辦法通過定位特定列來設定默認值?或者真的有可能嗎?示例:我想將 slug 的默認值設定為列 id 的值;所以如果我這樣做
Articles::create(['id' => 'uuid-1', 'title' => 'article 1', 'details' => 'details article 1']);
我希望該 slug'uuid-1'在創建后不通過更新作為默認值
uj5u.com熱心網友回復:
您可以簡單地使用 Eloquent 創建方法。
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use App\User;
use Illuminate\Support\Str;
class Articles extends Model
{
protected static function boot() {
parent::boot();
static::creating(function ($article) {
$article->slug = Str::slug($article->id);
});
}
//The rest of methods
uj5u.com熱心網友回復:
顯然,我認為這是不可能的。因為laravel不可能在創建記錄之前就知道它的id。但即使這不是一個好的做法,我也可以為您提供一種方法。您可以將此代碼添加到文章模型中,而不是在遷移中提供默認值:
protected static function boot() {
parent::boot(); // TODO: Change the autogenerated stub
self::saving(function (Article $article){
if ($article->getAttribute('slug') == null)
{
$lastrecord = Article::latest()->first();
$slug = $lastrecord->id 1;
$article->setAttribute('slug', $slug);
}
});
}
此代碼將在創建每篇文章時起作用,并且在發送 slug 時不會執行任何操作。但是如果沒有發送slug,它會取最新的記錄,增加它的id并創建slug并自動注冊。所以你不需要任何更新程序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/336385.html
上一篇:與屬性laravel8的關系
