-
app/Models/School.php
Open in GitHubclass School extends Model implements ExistsInSis { // ... public function languages(): BelongsToMany { return $this->belongsToMany(Language::class) ->withPivot(['request_max', 'overlap_max']); } // ... }
-
database/migrations/2023_12_20_075515_create_language_school_table.php
Open in GitHubpublic function up(): void { Schema::create('language_school', function (Blueprint $table) { $table->foreignId('language_id')->constrained()->cascadeOnDelete(); $table->foreignId('school_id')->constrained()->cascadeOnDelete(); $table->integer('request_max')->nullable(); $table->integer('overlap_max')->nullable(); $table->primary(['language_id', 'school_id']); }); }
-
app/Http/Controllers/Settings/SaveSchoolLanguagesController.php
Open in GitHubuse App\Http\Controllers\Controller; use App\Http\Requests\UpdateSchoolLanguagesRequest; use Illuminate\Http\Request; class SaveSchoolLanguagesController extends Controller { public function __invoke(UpdateSchoolLanguagesRequest $request) { $school = $request->school(); $languages = $request->collect('languages') ->mapWithKeys(fn (array $language) => [$language['id'] => [ 'request_max' => $language['request_max'], 'overlap_max' => $language['overlap_max'], ]]); $school->languages()->sync($languages); session()->flash('success', __('Language settings updated successfully.')); return to_route('settings.school.edit'); } }
-
app/Http/Resources/LanguageResource.php
Open in GitHubuse App\Models\Language; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class LanguageResource extends JsonResource { public function toArray(Request $request): array { return [ 'id' => $this->resource->id, 'name' => $this->resource->name, 'native_name' => $this->resource->native_name, 'code' => $this->resource->code, 'request_max' => $this->resource->pivot?->request_max, 'overlap_max' => $this->resource->pivot?->overlap_max, ]; } }