first commit
This commit is contained in:
107
modules/Member/app/Observers/FieldObserver.php
Normal file
107
modules/Member/app/Observers/FieldObserver.php
Normal file
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace Modules\Member\Observers;
|
||||
|
||||
use Modules\Member\Models\Fields;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class FieldObserver {
|
||||
|
||||
public $type = [
|
||||
'string' => 'string',
|
||||
'audio' => 'string',
|
||||
'video' => 'string',
|
||||
'editor' => 'longText',
|
||||
'text' => 'text',
|
||||
'image' => 'string',
|
||||
'images' => 'text',
|
||||
'file' => 'string',
|
||||
'files' => 'text',
|
||||
'number' => 'integer',
|
||||
'bool' => 'boolean',
|
||||
'date' => 'date',
|
||||
'datetime' => 'dateTime',
|
||||
'select' => 'string',
|
||||
'radio' => 'string',
|
||||
'checkbox' => 'text'
|
||||
];
|
||||
/**
|
||||
* 处理 "created" 事件。
|
||||
*/
|
||||
public function created(Fields $fields): void {
|
||||
$table = 'member_extends';
|
||||
if(Schema::hasTable($table)){
|
||||
Schema::table($table, function (Blueprint $table) use ($fields) {
|
||||
$type = $this->type[$fields->type] ? $this->type[$fields->type] : 'string';
|
||||
if($fields->length){
|
||||
$field = $table->{$type}($fields->name, length: $fields->length);
|
||||
}else{
|
||||
$field = $table->{$type}($fields->name);
|
||||
}
|
||||
if($fields->default_value){
|
||||
$field = $field->default($fields->default_value);
|
||||
}
|
||||
if($fields->type == 'required'){
|
||||
$field = $field->nullable();
|
||||
}
|
||||
$field = $field->comment($fields->title)->after($fields->after);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理 "updated" 事件。
|
||||
*/
|
||||
public function updated(Fields $fields): void {
|
||||
$table = 'member_extends';
|
||||
if (!Schema::hasTable($table) && !Schema::hasColumn($table, $fields->name)) {
|
||||
return;
|
||||
}
|
||||
if($fields->isDirty('name') && Schema::hasColumn($table, $fields->getOriginal('name'))){
|
||||
Schema::table($table, function (Blueprint $table) use ($fields) {
|
||||
$table->renameColumn($fields->getOriginal('name'), $fields->name);
|
||||
});
|
||||
}
|
||||
|
||||
if($fields->isDirty()){
|
||||
Schema::table($table, function (Blueprint $table) use ($fields) {
|
||||
$type = $this->type[$fields->type] ? $this->type[$fields->type] : 'string';
|
||||
if($fields->length){
|
||||
$field = $table->{$type}($fields->name, length: $fields->length);
|
||||
}else{
|
||||
$field = $table->{$type}($fields->name);
|
||||
}
|
||||
if($fields->default_value){
|
||||
$field = $table->default($fields->default_value);
|
||||
}else{
|
||||
if($fields->type == 'required'){
|
||||
$field = $field->nullable(false);
|
||||
}else{
|
||||
$field = $field->nullable();
|
||||
}
|
||||
}
|
||||
$field->after($fields->after)->comment($fields->title)->change();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public function deleted(Fields $fields): void {
|
||||
if($fields->status == 1){
|
||||
$table = 'member_extends';
|
||||
if (Schema::hasTable($table) && Schema::hasColumn($table, $fields->name)) {
|
||||
Schema::table($table, function (Blueprint $table) use ($fields) {
|
||||
$table->dropColumn($fields->name);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user