WNoraxil's avatar

Using Multiple Models in one controller

Good day,

I am currently attempting to do CRUD operations in one controller for a specific page, I managed to do the first "inserting data" correctly to the SQL server, however, for some odd reason the other function does not insert the data and I just don't see my mistake, please see below code.

PLEASE NOTE: I am trying to make the apiAddEntryType function work.

When I fill in the form and submit the data, the page just reloads.

Form

<div class="modal fade updateTableModel" id="addSectionTypeModel" tabindex="-1" aria-labelledby="addSectionTypeModelLabel" aria-hidden="true">
        <div class="modal-dialog">
            <form method="post" action="{{ route('api-sectionType') }}">           
            @csrf
                <div class="modal-content">                 
                    <div class="modal-header">
                        <h5 class="modal-title" id="addSectionTypeModelLabel">Create Section Type</h5>
                        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                    </div>
                    <div class="modal-body"> 
                        <div class="form-group">
                            <label for="sectionType">{{ __('Section Type') }}</label>
                            <input id="sectionType" type="text" class="form-control @error('sectionType') is-invalid @enderror" name="sectionType" value="{{ old('sectionType') }}" required autocomplete="sectionType" autofocus>

                            @error('sectionType')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                            @enderror
                        </div>
                        <div class="form-group">
                            <label for="sectionValue">{{ __('sectionValue') }}</label>
                            <input id="sectionValue" type="text" class="form-control @error('sectionValue') is-invalid @enderror" name="sectionValue" value="{{ old('sectionValue') }}" autocomplete="sectionValue" autofocus>

                            @error('email')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                            @enderror
                        </div>
                        <div class="form-group">
                            <label for="description">{{ __('description') }}</label>
                            {{-- <input id="description" type="text" class="form-control @error('description') is-invalid @enderror" name="description" autocomplete="description"> --}}
                            <textarea id="description" type="text" class="form-control @error('description') is-invalid @enderror" name="description" autocomplete="description" rows="5"></textarea>

                            @error('description')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                            @enderror
                        </div>           
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
                        <button type="submit" class="btn btn-success">Save</button>
                    </div>
                </div>
            </form>
        </div>
    </div>

Controller:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\ent_sectionType;
use App\Models\ent_entryType;

use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Validator;

class AdminEntry extends Controller
{
    // Create a Function to log the user in
    public function index()
    {
        $data['entryType'] = ent_entryType::leftJoin('sys_users', 'ent_entryType.modifiedBy', '=', 'sys_users.userID')
            ->join('sys_status', 'ent_entryType.statusID', '=', 'sys_status.statusID')
            ->get(['ent_entryType.*', 'sys_status.status', 'sys_users.username']);

        $data['sectionType'] = ent_sectionType::leftJoin('sys_users', 'ent_sectionType.modifiedBy', '=', 'sys_users.userID')
            ->join('sys_status', 'ent_sectionType.statusID', '=', 'sys_status.statusID')
            ->get(['ent_sectionType.*', 'sys_status.status', 'sys_users.username']);

        // $data['entryType'] = $entryType;
        // $data['sectionType'] = $sectionType;

        return view('livewire.admin.entry', ['data' => $data]);
    }

    /*******************************    Entry Type    *******************************/

    public function apiAddEntryType(Request $request)
    {
        $request->validate([
            'entryType'       =>  'required|string|unique:ENT_EntryType|min:3|max:18',
            'prefix'          =>  'required|max:4',
            'delimiter'       =>  'max:1',
            'description'     =>  'required|min:10|max:100'
        ]);

        // Connect the Model to a variable
        $entryType = new ent_entryType();

        // Assign variables to table columns
        $entryType->entryType = $request->entryType;
        $entryType->prefix = $request->prefix;
        $entryType->delimiter = $request->delimiter;
        $entryType->statusID = 1;
        $entryType->description = $request->description;

        // Save data to the database
        $result = $entryType->save();

        // Check if it was a successful, otherwise print error.
        if ($result) {
            return back()->with('success', 'Saved Successfully');
        } else {
            return back()->with('error', 'An error occurred);
        }
    }

    public function apiEditEntryType(Request $request)
    {
        $request->validate([
            'entryType'       =>  'required|string|unique:ENT_EntryType|min:3|max:18',
            'prefix'          =>  'required|max:4',
            'delimiter'       =>  'max:1',
            'description'     =>  'required|min:10|max:100'
        ]);

        // Connect the Model to a variable
        $entryType = ent_entryType::where('entryTypeID', '=', $request->entryTypeID)->first();
        if ($entryType) {
            return back()->with('success', 'Saved Successfully');
            dd();
        } else {
            return back()->with('error', 'An error occurred);
            dd();
        }

        if ($entryType) {
            // Assign variables to table columns
            // $userID = $request->session()->get('userID');

            $entryType->entryType = $request->entryType;
            $entryType->prefix = $request->prefix;
            $entryType->delimiter = $request->delimiter;
            $entryType->statusID = $request->statusID;
            $entryType->description = $request->description;
            // $entryType->modifiedBy = $userID;
            $entryType->modifiedDate = date('d-m-y h:i:s');

            // Save data to the database
            $result = $entryType->save();

            // Check if it was a successful, otherwise print error.
            if ($result) {
                return back()->with('success', 'Saved Successfully');
            } else {
                return back()->with('error', 'An error occurred);
            }
        }
    }

    /*******************************    Entry Type    *******************************/

    /*******************************    Section Type    *******************************/

    public function apiAddSectionType(Request $request)
    {
        $request->validate([
            'sectionType'       =>  'required|string|unique:ENT_SectionType|min:3|max:50',
            'value'             =>  'required|max:20',
            'description'       =>  'required|min:10|max:100'
        ]);

        // Connect the Model to a variable
        $sectionType = new ent_sectionType();

        $userID = $request->session()->get('userID');
        // Check if it was a successful, otherwise print error.

        // Assign variables to table columns
        $sectionType->sectionType = $request->sectionType;
        $sectionType->value = $request->value;
        $sectionType->statusID = 1;
        $sectionType->default = 1;
        $sectionType->description = $request->description;
        $sectionType->modifiedBy = $userID;
        $sectionType->modifiedDate = date('d-m-y h:i:s');


        // Save data to the database
        $result = $sectionType->save();

        // Check if it was a successful, otherwise print error.
        if ($result) {
            return back()->with('success', 'Saved Successfully');
        } else {
            return back()->with('error', 'An error occurred);
        }
    }

    public function apiEditSectionType(Request $request)
    {
        $request->validate([
            'entryType'       =>  'required|string|unique:ENT_EntryType|min:3|max:18',
            'prefix'          =>  'required|max:4',
            'delimiter'       =>  'max:1',
            'description'     =>  'required|min:10|max:100'
        ]);

        // Connect the Model to a variable
        $sectionType = ent_entryType::where('entryTypeID', '=', $request->sectionType)->first();

        if ($sectionType) {
            // Assign variables to table columns
            $userID = $request->session()->get('userID');

            $sectionType->sectionType = $request->sectionType;
            $sectionType->value = $request->value;
            $sectionType->statusID = $request->statusID;
            $sectionType->description = $request->description;
            $sectionType->modifiedBy = $userID;
            $sectionType->modifiedDate = date('d-m-y h:i:s');

            // Save data to the database
            $result = $sectionType->save();

            // Check if it was a successful, otherwise print error.
            if ($result) {
                return back()->with('success', 'Saved Successfully');
            } else {
                return back()->with('error', 'An error occurred);
            }
        }
    }

    /*******************************    Entry Type    *******************************/
}

web.php

use Illuminate\Support\Facades\Route;

// Import Controllers - Authentications
use App\Http\Controllers\AuthUser;

// Import Controllers - Admin
use App\Http\Controllers\AdminSystemParameter;
use App\Http\Controllers\AdminEntry;

use App\Http\Livewire\Signin;

// Administraion
use App\Http\Livewire\AdminIndex;
use App\Http\Livewire\AdminInputGroup;
use App\Http\Livewire\AdminColours;
use App\Http\Livewire\AdminWebSetup;
use App\Http\Livewire\Admin\Users\RegisterSystemUser;
use App\Http\Livewire\Admin\Users\SystemUsers;

// Home
use App\Http\Livewire\Index;
use App\Http\Livewire\Counter;

/*
|--------------------------------------------------------------------------
| Authentication
|--------------------------------------------------------------------------
*/
// Route for login
Route::group(['middleware' => 'alreadyloggedin'], function () {
    Route::get('/login', [AuthUser::class, 'login']);
    Route::post('/api-loginUser', [AuthUser::class, 'apiLoginUser'])->name('api-login-user');

    // Route for register
    Route::get('/register', [AuthUser::class, 'registration']);
    Route::post('/admin/user/register/api-registerUser', [AuthUser::class, 'apiRegisterUser'])->name('api-register-user');
});

// Route for logout
Route::get('/api-logoutUser', [AuthUser::class, 'apiLogoutUser']);

Route::group(['middleware' => 'usersession'], function () {
    /*
    |--------------------------------------------------------------------------
    | Administration
    |--------------------------------------------------------------------------
    */
    /** Admin **/
    Route::get('/admin/index', AdminIndex::class)->name('admin');
    Route::get('/admin/inputGroup', AdminInputGroup::class)->name('admin');
    Route::get('/admin/colours', AdminColours::class)->name('admin');
    Route::get('/admin/webSetup', AdminWebSetup::class)->name('admin.websetup');
    Route::get('/admin/user', SystemUsers::class)->name('admin.user');
    Route::get('/admin/systemParameter', [AdminSystemParameter::class, 'index']);

    /** Entry Config  **/
    Route::get('/admin/entry', [AdminEntry::class, 'index']);
    // Add Entry Type
    Route::post('/admin/entry/create/api-entryType', [AdminEntry::class, 'apiAddEntryType'])->name('api-entryType');
    Route::post('/admin/entry/create/api-sectionType', [AdminEntry::class, 'apiAddSectionType'])->name('api-sectionType');

    // Home
    Route::get('index', Index::class);
    Route::get('counter', Counter::class);
});

Migration

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('ENT_SectionType', function (Blueprint $table) {
            $table->id('sectionTypeID');
            $table->string('sectionType', 50)->unique();
            $table->string('sectionValue', 20);
            $table->integer('default');
            $table->unsignedBigInteger('statusID');
            $table->foreign('statusID')->references('statusID')->on('sys_status')->onDelete('cascade');
            $table->longtext('description')->nullable();
            $table->unsignedBigInteger('modifiedBy')->nullable();
            $table->foreign('modifiedBy')->references('userID')->on('sys_users');
            $table->dateTimeTz('modifiedDate')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('ENT_SectionType');
    }
};

Model

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
// use Spatie\Permission\Traits\HasRoles;

class ent_sectionType extends Model
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $table = 'ENT_SectionType';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'sectionType',
        'sectionValue',
        'statusID',
        'description',
        'modifiedBy',
        'modifiedDate'
    ];


    /**
     * The attributes that should be cast.
     *
     * @var array
     */
    protected $casts = [
        'modifiedDate' => 'datetime',
    ];
}

0 likes
1 reply
WNoraxil's avatar

Also displaying the data in a blade.php file for both models work, it is just adding the data, which seems to be the issue.

Please or to participate in this conversation.