inserting in different tables from one form in Laravel 5

Viewed 8941

Hello stackoverflow please help me to understand laravel, i am new in laravel 5. I am really a beginner in laravel. I am learning Laravel 5. Now i am making a registration page where i need to insert my data into my database.

Here is my problems: 1. Please correct my code, because i cant insert my data into database. 2. Inserting my data into two tables.

Now in my situation, i have this two tables:

enter image description here

Now, i am creating a form which has this fields:

<form class="form-horizontal" action="{{ route('user_layouts.signup') }}" method="post">
  <div class="form-group">
    <label class="control-label col-sm-3" for="email">Email:</label>
    <div class="col-sm-6">
      <input type="email" class="form-control" id="email" name="email" placeholder="Email">
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-3" for="pwd">Password:</label>
    <div class="col-sm-6"> 
      <input type="password" class="form-control" id="password" name="password" placeholder="Password">
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-3" for="fname">First Name:</label>
    <div class="col-sm-6"> 
      <input type="text" class="form-control" id="fname" name="fname" placeholder="First Name">
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-3" for="lname">Last Name:</label>
    <div class="col-sm-6"> 
      <input type="text" class="form-control" id="lname" name="lname" placeholder="Last Name">
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-3" for="mname">Middle Name:</label>
    <div class="col-sm-6"> 
      <input type="text" class="form-control" id="mname" name="mname" placeholder="Middle Name">
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-3" for="contactnum">Contact #:</label>
    <div class="col-sm-6"> 
      <input type="text" class="form-control" id="contactnum" name="contactnum" placeholder="Contact Number">
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-3" for="gender">Gender:</label>
    <div class="col-sm-6"> 
        <label class="radio-inline"><input type="radio" name="gender">Male</label>
        <label class="radio-inline"><input type="radio" name="gender">Female</label>
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-sm-3" for="bday">Birthday:</label>
    <div class="col-sm-8">
        <div class="row">
            <div class="col-xs-4"> 
            <select class="form-control" id="month" name="month">
                <option>Month</option>
                <option value="Jan">Jan</option>
                <option value="Feb">Feb</option>
                <option value="Mar">Mar</option>
                <option value="Apr">Apr</option>
                <option value="May">May</option>
                <option value="Jun">Jun</option>
                <option value="Jul">Jul</option>
                <option value="Aug">Aug</option>
                <option value="Sep">Sep</option>
                <option value="Oct">Oct</option>
                <option value="Nov">Nov</option>
                <option value="Dec">Dec</option>
            </select>
            </div>

            <div class="col-xs-4">                      
            <select class="form-control" id="day" name="day">
                <option value="day">Day</option>
                @for ($i = 0; $i <= 31; $i++)
                    <option value="{{ $i }}">{{ $i }}</option>
                @endfor
            </select>
            </div>

            <div class="col-xs-4">
            <select class="form-control" id="year" name="year">
                <option>Year</option>                                   
                <option value="1992">1992</option>
                <option value="1993">1993</option>
                <option value="1994">1994</option>
                <option value="1995">1995</option>                                      
            </select>
            </div>
        </div>                  
    </div>
  </div>
  <div class="form-group"> 
    <div class="col-sm-offset-3 col-sm-10">
      <button type="submit" class="btn btn-success">Submit</button>
    </div>
  </div>
  {{ csrf_field() }}
</form>

now here is my routes:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('shop_layouts.index');
});

Route::get('/signup', [
    'uses'  => 'UserController@getSignup',
    'as'    => 'user_layouts.signup'
]);

Route::post('/signup', [
    'uses'  => 'UserController@postSignup',
    'as'    => 'user_layouts.signup'
]);

Here is my controller:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function getSignup() {
        return view('user_layouts.signup');
    }

    public function postSignup(Request $request) {
        $this->validate($request, [
            'email' => 'email|required|unique:tbl_users',
            'password' => 'required|min:24',
            'fname' => 'required',
            'lname' => 'required',
            'mname' => 'required',
            'contactnum' => 'required',
            'gender' => 'required',
            'month' => 'required',
            'day' => 'required',
            'year' => 'required'
        ]);

        $user = new User([
            'email' => $request->input('email'),
            'password' => bcrypt($request->input('password')),
        ]);
        $user->save();

        $customer = new Customer([   
            'fname' => $request->input('fname'),
            'lname' => $request->input('lname'),
            'mname' => $request->input('mname'),
            'contactnum' => $request->input('contactnum'),
            'gender' => $request->input('gender'),
            'lname' => $request->input('lname'),
        ]);
        $customer->save();
    }

}

and lastly my two models:

Customer Model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
    protected $fillable = [
        'fname', 'lname','mname','contactnum','gender'
    ];

    public function user() {
        return $this->belongsTo(User::class);
    }
}

User Model:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Model;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'email', 'password'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function customer() {
        return $this->hasOne(Customer::class);  
    }
}

Here is my migration: Customer:

<?php

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

class TblCustomers extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tbl_customers', function (Blueprint $table){
            $table->increments('customer_id');
            $table->integer('user_id')->unsigned();
            $table->string('fname');
            $table->string('lname');
            $table->string('mname');
            $table->string('contact_no');
            $table->string('gender');
            $table->date('birthdate');
            $table->timestamps();                        
        });

        Schema::table('tbl_customers', function (Blueprint $table){
            $table->foreign('user_id')->references('user_id')->on('tbl_users')->onDelete('cascade');
        });
    }

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

User:

<?php

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

class CreateUserTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tbl_users', function (Blueprint $table){
            $table->increments('user_id');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('tbl_users');
    }
}
1 Answers
Related