File: /var/www/ipsremont-demo/app/Repository/Schema/SchemaRepository.php
<?php
namespace App\Repository\Schema;
use App\Models\DevicesSchema;
use App\Models\Schema;
use App\Models\SchemaParts;
use App\Repository\BaseRepository;
use App\Traits\GridTrait;
use Illuminate\Database\Eloquent\Builder;
class SchemaRepository extends BaseRepository
{
use GridTrait;
/**
* @return Builder
*/
public static function getQuery(): Builder
{
return Schema::query();
}
public static function createDeviceSchemaRelation($device_id, $schema_id)
{
$ds = DevicesSchema::query()->where('device_id', $device_id)->where('schema_id', $schema_id)->first();
if (!$ds) {
$ds = new DevicesSchema();
$ds->device_id = $device_id;
$ds->schema_id = $schema_id;
$ds->save();
}
}
public static function save($data, $device_id): Schema
{
$schema = Schema::where('external_id', $data['external_id'])->withTrashed()->first();
if (!$schema) {
$schema = new Schema();
} else {
$schema->deleted_at = null;
}
$schema->fill($data);
$schema->save();
self::createDeviceSchemaRelation($device_id, $schema->id);
return $schema;
}
public static function update($data, $schema, $device_id): Schema
{
$schema->deleted_at = null;
$schema->fill($data);
$schema->update();
self::createDeviceSchemaRelation($device_id, $schema->id);
return $schema;
}
public static function delete($external_id): int
{
SchemaParts::where('schema_external_id', $external_id)->delete();
Schema::where('external_id', $external_id)->delete();
return 0;
}
}