Overview
El modelo Expedientes representa los expedientes de conciliación extrajudicial gestionados por el centro de conciliación. Cada expediente está asociado a un cliente y puede tener múltiples submaterias y actividades de conciliación.
Namespace: App\Models\Expedientes
Table: expedientes
Traits:
HasFactory - Soporte para factories de Laravel
Searchable - Integración con Laravel Scout para búsqueda
Fillable Attributes
Número único del expediente de conciliación
Fecha de inicio del expediente
Fecha de finalización o cierre del expediente
Descripción detallada del expediente de conciliación
Estado actual del expediente (abierto, en proceso, cerrado, acuerdo total, falta de acuerdo, etc.)
ID del cliente solicitante (foreign key)
Relationships
cliente()
Relación muchos a uno con el cliente solicitante del expediente.
Type: BelongsTo
Returns: Illuminate\Database\Eloquent\Relations\BelongsTo
public function cliente () : BelongsTo
{
return $this -> belongsTo ( Cliente :: class , 'id_cliente' , 'id' );
}
submaterias()
Relación muchos a muchos con las submaterias conciliables asociadas al expediente.
Type: BelongsToMany
Returns: Illuminate\Database\Eloquent\Relations\BelongsToMany
Pivot Table: expediente_has_submaterias
public function submaterias () : BelongsToMany
{
return $this -> belongsToMany (
Submaterias :: class ,
'expediente_has_submaterias' ,
'id_expediente' ,
'id_submateria'
);
}
conActividades()
Relación uno a muchos con las actividades de conciliación programadas para el expediente.
Type: HasMany
Returns: Illuminate\Database\Eloquent\Relations\HasMany
public function conActividades () : HasMany
{
return $this -> hasMany ( ActividadConciliacion :: class , 'id_expediente' , 'id' );
}
El modelo Expedientes se relaciona con otros modelos del sistema:
Expediente_has_submateria - Tabla pivot para submaterias asociadas
expediente_has_invitado - Tabla pivot para partes invitadas al expediente
Expediente_has_conciliador - Tabla pivot para conciliadores asignados
ActividadConciliacion - Actividades y audiencias programadas
Laravel Scout Configuration
El modelo Expedientes está configurado para búsqueda con Laravel Scout. Los siguientes campos son indexados:
public function toSearchableArray ()
{
return [
'n_expediente' => $this -> n_expediente ,
'estado' => $this -> estado ,
];
}
Usage Examples
Creating an Expediente
Searching Expedientes
Working with Submaterias
Managing Actividades
Eager Loading Relationships
Updating Expediente Status
Complex Queries
use App\Models\ Expedientes ;
$expediente = Expedientes :: create ([
'n_expediente' => 'EXP-2024-001' ,
'fecha_inicio' => '2024-01-15' ,
'descripcion' => 'Expediente de conciliación extrajudicial en materia familiar' ,
'estado' => 'abierto' ,
'id_cliente' => 1
]);
Database Schema
CREATE TABLE expedientes (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY ,
n_expediente VARCHAR ( 255 ) NOT NULL UNIQUE ,
fecha_inicio DATE NOT NULL ,
fecha_final DATE NULL ,
descripcion TEXT ,
estado VARCHAR ( 255 ) NOT NULL ,
id_cliente BIGINT UNSIGNED NOT NULL ,
created_at TIMESTAMP NULL ,
updated_at TIMESTAMP NULL ,
FOREIGN KEY (id_cliente) REFERENCES clientes(id) ON DELETE CASCADE ,
INDEX idx_n_expediente (n_expediente),
INDEX idx_estado (estado),
INDEX idx_id_cliente (id_cliente)
);
CREATE TABLE expediente_has_submaterias (
id_expediente BIGINT UNSIGNED NOT NULL ,
id_submateria BIGINT UNSIGNED NOT NULL ,
PRIMARY KEY (id_expediente, id_submateria),
FOREIGN KEY (id_expediente) REFERENCES expedientes(id) ON DELETE CASCADE ,
FOREIGN KEY (id_submateria) REFERENCES submaterias(id) ON DELETE CASCADE
);
Complete Model Code
/home/daytona/workspace/source/app/Models/Expedientes.php
<? php
namespace App\Models ;
use Illuminate\Database\Eloquent\Factories\ HasFactory ;
use Illuminate\Database\Eloquent\ Model ;
use Illuminate\Database\Eloquent\Relations\ BelongsTo ;
use Illuminate\Database\Eloquent\Relations\ BelongsToMany ;
use Illuminate\Database\Eloquent\Relations\ HasMany ;
use Laravel\Scout\ Searchable ;
class Expedientes extends Model
{
use HasFactory , Searchable ;
protected $fillable = [
'n_expediente' ,
'fecha_inicio' ,
'fecha_final' ,
'descripcion' ,
'estado' ,
'id_cliente' ,
];
public function cliente () : BelongsTo
{
return $this -> belongsTo ( Cliente :: class , 'id_cliente' , 'id' );
}
public function submaterias () : BelongsToMany
{
return $this -> belongsToMany (
Submaterias :: class ,
'expediente_has_submaterias' ,
'id_expediente' ,
'id_submateria'
);
}
public function conActividades () : HasMany
{
return $this -> hasMany ( ActividadConciliacion :: class , 'id_expediente' , 'id' );
}
public function toSearchableArray ()
{
return [
'n_expediente' => $this -> n_expediente ,
'estado' => $this -> estado ,
];
}
}