I'm quite new to Laravel, I'm using Laravel 7 and Mysql database. I have a registration form that has a dropdown select field that pulls a list of data from mysql database. The list displays well to the user but when an option is clicked, it does not update the column in my database table once a user clicks "Register" button. The column is a foreign key because there is a one-to-one relationship between my two tables i.e "Clients" table and "Categories" table. The column name is "category_id" (This is a foreign key).
How can I update this column with an ID (from "Categories" Table) when a user selects an option?
RegisterController:
<?php
namespace App\Http\Controllers\Auth\Client;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\Client;
use App\Models\Category;
use App\Models\Role;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
// Showing a Registration Form to User
public function create()
{
$categories = Category::all();
return view('auth.client.register',compact('categories'));
}
// Validating the User
public function store(Request $request)
{
$request->validate([
'first_name' => 'required|string|max:255',
'last_name' => 'required|string|max:255',
'telephone_number' => 'required|digits:10',
'email' => 'required|string|email|max:255|unique:users','regex:/^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,6}$/',
'password' => 'required|string|min:6|confirmed',
'password_confirmation' => 'required',
]);
// Creating the Client - Client is inserted in both clients and users tables
$client = Client::create([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'telephone_number' => $request->telephone_number,
'email' => $request->email,
'password' => Hash::make($request->password),
'category_id' => $request->category_id,
]);
$user = User::create([
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'telephone_number' => $request->telephone_number,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$client->update(['user_id' => $user->id]);
$user->email_verified_at = Carbon::now();
$user->is_email_verified = 1;
$user->is_active = 1;
$user->set_password = true;
$ownerId = $client->id;
$ownerType = Client::class;
$user->update(['owner_id' => $ownerId, 'owner_type' => $ownerType]);
$user->assignRole('Client');
return redirect('dashboard');
}
}
Categories Model:
<?php
namespace App\Models;
use Eloquent as Model;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class Category extends Model
{
/**
* Validation rules.
*
* @var array
*/
public static $rules = [
'name' => 'string|required|unique:categories,name',
'color' => 'string|required',
];
public $table = 'categories';
public $fillable = [
'name',
'color',
'description'
];
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
'id' => 'integer',
'name' => 'string',
];
}
Relationship in my Clients Model:
/**
* @return BelongsTo
*/
public function category()
{
return $this->belongsTo(Category::class);
}
Select field in my register blade file:
<div class="col-sm-6 col-lg-6 col-md-12">
<label for="category">Category</label><span class="text-danger">*</span>
<select class="custom-select" id="category_id" name="category_id">
@foreach($categories as $category )
<option value="{{ $category->id }}">{{ $category->name }}</option>
@endforeach
</select>
</div>


