46 lines
1.5 KiB
PHP
46 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Traits;
|
|
|
|
use App\Models\Structure;
|
|
use App\Models\Scopes\StructureScope;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
trait BelongsToStructure
|
|
{
|
|
/**
|
|
* Boot the trait to apply the GlobalScope.
|
|
*/
|
|
protected static function bootBelongsToStructure()
|
|
{
|
|
static::addGlobalScope('structure', function (Builder $builder) {
|
|
// On utilise la configuration injectée par le middleware plutôt que d'appeler auth()->user()
|
|
// Cela évite la boucle infinie d'authentification lorsque le scope s'applique à la table `users`.
|
|
$structureId = config('tenant.structure_id');
|
|
if ($structureId !== null) {
|
|
// Dans le cas spécifique de SQLite en mode de test, il faut parfois préciser la table.
|
|
// Par sécurité on gère la jointure si besoin, mas ici on reste simple.
|
|
$builder->where($builder->getModel()->getTable() . '.structure_id', $structureId);
|
|
}
|
|
});
|
|
|
|
static::creating(function ($model) {
|
|
// Assigner automatiquement la structure_id sur les nouveaux enregistrements
|
|
if (!$model->structure_id) {
|
|
$structureId = config('tenant.structure_id');
|
|
if ($structureId) {
|
|
$model->structure_id = $structureId;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Define the relationship to Structure.
|
|
*/
|
|
public function structure()
|
|
{
|
|
return $this->belongsTo(Structure::class);
|
|
}
|
|
}
|