Normalised photo table
This commit is contained in:
parent
bafc34b1c0
commit
8f093f50b7
10
app/Models/Make.php
Normal file
10
app/Models/Make.php
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Make extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = ['name'];
|
||||||
|
}
|
15
app/Models/Model.php
Normal file
15
app/Models/Model.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model as EloquentModel;
|
||||||
|
|
||||||
|
class Model extends EloquentModel
|
||||||
|
{
|
||||||
|
protected $fillable = ['name'];
|
||||||
|
|
||||||
|
public function make()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Make::class);
|
||||||
|
}
|
||||||
|
}
|
@ -19,6 +19,11 @@ class Photo extends Abstracted\Catalog
|
|||||||
8=>-90,
|
8=>-90,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function software()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Software::class);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Date the photo was taken
|
* Date the photo was taken
|
||||||
*/
|
*/
|
||||||
@ -38,7 +43,7 @@ class Photo extends Abstracted\Catalog
|
|||||||
if ($new)
|
if ($new)
|
||||||
$file = sprintf('%s.%s',((is_null($this->date_created) OR ! $this->date_created)
|
$file = sprintf('%s.%s',((is_null($this->date_created) OR ! $this->date_created)
|
||||||
? sprintf('UNKNOWN/%07s',$this->file_path_id())
|
? sprintf('UNKNOWN/%07s',$this->file_path_id())
|
||||||
: sprintf('%s_%03s',date('Y/m/d-His',$this->date_created),$this->subsectime).
|
: sprintf('%s_%03s',$this->date_created->format('Y/m/d-His'),$this->subsectime).
|
||||||
($this->subsectime ? '' : sprintf('-%05s',$this->id))),$this->type());
|
($this->subsectime ? '' : sprintf('-%05s',$this->id))),$this->type());
|
||||||
|
|
||||||
return (($short OR preg_match('/^\//',$file)) ? '' : config('photo.dir').DIRECTORY_SEPARATOR).$file;
|
return (($short OR preg_match('/^\//',$file)) ? '' : config('photo.dir').DIRECTORY_SEPARATOR).$file;
|
||||||
|
15
app/Models/Software.php
Normal file
15
app/Models/Software.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class Software extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = ['name'];
|
||||||
|
|
||||||
|
public function model()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(\App\Models\Model::class);
|
||||||
|
}
|
||||||
|
}
|
54
database/migrations/2019_11_22_203904_revert_index_photo.php
Normal file
54
database/migrations/2019_11_22_203904_revert_index_photo.php
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class RevertIndexPhoto extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table('photo', function (Blueprint $table) {
|
||||||
|
$table->dropIndex(['signature']);
|
||||||
|
$table->dropIndex(['filename']);
|
||||||
|
$table->dropIndex(['remove']);
|
||||||
|
$table->dropIndex(['duplicate']);
|
||||||
|
$table->dropIndex(['date_created','subsectime','model','make']);
|
||||||
|
});
|
||||||
|
Schema::table('videos', function (Blueprint $table) {
|
||||||
|
$table->dropIndex(['signature']);
|
||||||
|
$table->dropIndex(['filename']);
|
||||||
|
$table->dropIndex(['remove']);
|
||||||
|
$table->dropIndex(['duplicate']);
|
||||||
|
$table->dropIndex(['date_created','model','make']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('photo', function (Blueprint $table) {
|
||||||
|
$table->index(['signature']);
|
||||||
|
$table->index(['filename']);
|
||||||
|
$table->index(['remove']);
|
||||||
|
$table->index(['duplicate']);
|
||||||
|
$table->index(['date_created','subsectime','model','make']);
|
||||||
|
});
|
||||||
|
Schema::table('videos', function (Blueprint $table) {
|
||||||
|
$table->index(['signature']);
|
||||||
|
$table->index(['filename']);
|
||||||
|
$table->index(['remove']);
|
||||||
|
$table->index(['duplicate']);
|
||||||
|
$table->index(['date_created','model','make']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
use App\Models\{Photo,Make,Model,Software};
|
||||||
|
|
||||||
|
class CreateMakemodelTables extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('makes', function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->timestamps();
|
||||||
|
$table->string('name')->unique();
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create('models', function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->timestamps();
|
||||||
|
$table->string('name')->nullable();
|
||||||
|
|
||||||
|
$table->bigInteger('make_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('make_id')->references('id')->on('makes');
|
||||||
|
$table->unique(['name','make_id']);
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::create('software', function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->timestamps();
|
||||||
|
$table->string('name')->nullable();
|
||||||
|
|
||||||
|
$table->bigInteger('model_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('model_id')->references('id')->on('models');
|
||||||
|
$table->unique(['name','model_id']);
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::table('photo', function (Blueprint $table) {
|
||||||
|
$table->bigInteger('software_id')->unsigned()->nullable();
|
||||||
|
$table->foreign('software_id')->references('id')->on('software');
|
||||||
|
});
|
||||||
|
|
||||||
|
$po = Photo::select(['make','model','software'])
|
||||||
|
->groupBy(['make','model','software']);
|
||||||
|
|
||||||
|
foreach ($po->get() as $o) {
|
||||||
|
if (! $o->make AND ! $o->model AND ! $o->software)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$ma = NULL;
|
||||||
|
|
||||||
|
dump(['make'=>$o->make,'model'=>$o->model,'software'=>$o->software]);
|
||||||
|
if ($o->make)
|
||||||
|
$ma = Make::firstOrCreate(['name'=>$o->make]);
|
||||||
|
|
||||||
|
$mo = Model::firstOrNew(['name'=>$o->model]);
|
||||||
|
if ($ma)
|
||||||
|
$mo->make_id = $ma->id;
|
||||||
|
$mo->save();
|
||||||
|
|
||||||
|
$so = Software::firstOrNew(['name'=>$o->software]);
|
||||||
|
if ($so)
|
||||||
|
$so->model_id = $mo->id;
|
||||||
|
$so->save();
|
||||||
|
|
||||||
|
foreach (Photo::where('make',$o->make)
|
||||||
|
->where('model',$o->model)
|
||||||
|
->where('software',$o->software)
|
||||||
|
->get() as $p) {
|
||||||
|
|
||||||
|
$p->software_id = $so->id;
|
||||||
|
$p->make = $p->model = $p->software = NULL;
|
||||||
|
$p->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Schema::table('photo', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('make');
|
||||||
|
$table->dropColumn('model');
|
||||||
|
$table->dropColumn('software');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::table('photo', function (Blueprint $table) {
|
||||||
|
$table->string('make',32)->nullable();
|
||||||
|
$table->string('model',128)->nullable();
|
||||||
|
$table->string('software')->nullable();
|
||||||
|
});
|
||||||
|
|
||||||
|
foreach (Photo::whereNotNULL('software_id')->get() as $p)
|
||||||
|
{
|
||||||
|
$s = $p->software()->first();
|
||||||
|
$p->software = $s->name;
|
||||||
|
|
||||||
|
if ($s->model)
|
||||||
|
$p->model = $s->model->name;
|
||||||
|
|
||||||
|
if ($s->model->make)
|
||||||
|
$p->make = $s->model->make->name;
|
||||||
|
|
||||||
|
$p->software_id = NULL;
|
||||||
|
$p->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
Schema::table('photo', function (Blueprint $table) {
|
||||||
|
$table->dropForeign(['software_id']);
|
||||||
|
$table->dropColumn('software_id');
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::dropIfExists('software');
|
||||||
|
Schema::dropIfExists('models');
|
||||||
|
Schema::dropIfExists('makes');
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user