0

On page skilledHandyman, I have a handyman_id stored from a previous page and a form with checkboxes with list of jobs available, what I want to do is to update foreign key job_id in "handymen" table using whatever checkbox has been selected by taking job_id from table "jobs". Value of job_id is in the checkbox as it can be seen in the code, it just has to be taken and update a job_id foreign key within handyman. I have set up relationships hasMany with jobs table and belongsTo from job to handyman. This is what I have at the moment but it obviously doesn't work as intended.

@extends('layouts.master')

@section('skilledHandyman', 'Add Job')
        @section('header2')
            <ul>
                <li><a href="{{url('assignjob')}}">Assign job</a></li>
            </ul>
        @show
@section('content')
    <h1>Handyman details</h1>
<ul>
    <li>First Name:{{$skilledHandyman->first_name}}</li>
    <li>Last Name:{{$skilledHandyman->last_name}}</li>
    <li>Street:{{$skilledHandyman->street}}</li>
    <li>Postcode:{{$skilledHandyman->postcode}}</li>
    <li>Town:{{$skilledHandyman->town}}</li>
    <li>Skills:{{$skilledHandyman->skills}}</li>
</ul>

    <form action="{{url('skilledHandyman')}}" method="POST">
    {{ csrf_field() }}
     @foreach ($jobs as $job)
        <div>
            <label>{{$job->name}}</label>
            <input type='checkbox' value='{{$job->id}}' name='jobs[]'/>
        </div>
    @endforeach
    <input type="submit" name="submitBtn" value="Assign Job">
</form>
@endsection

function jobassign(Request $request, $id)
{
    $job = Handyman::where('handyman_id', $handymanId)->update(['job_id', $request->job_id]);
    return redirect()->back()->with('status', trans('Handyman has been successfully assigned to this job.'));
}
function skilledHandyman($handymanId)
{
    $skilledHandyman = Handyman::find($handymanId);
    $jobs = Job::all();
    return view('layouts/skilledHandyman', ['jobs' => $jobs, 'skilledHandyman' => $skilledHandyman]);

}

Route::group(['middleware' => ['web']], function () {

Route::get('home', 'HandymanController@home');

Route::get('search', 'HandymanController@search');

Route::get('details/{skill}', 'HandymanController@details');

Route::get('skilledHandyman/{handymanId}', 'HandymanController@skilledHandyman');

Route::post('jobassign', 'HandymanController@jobassign');

//Route::get('assignjob/{handymanId}', 'HandymanController@assignJob');

Route::get('addjob', 'HandymanController@addJob');

Route::post('addjform', 'HandymanController@addjForm');

Route::get('jobs', 'HandymanController@jobs');

Route::get('jobsdetails/{jobId}', 'HandymanController@jobsdetails');

Route::get('deletejob', 'HandymanController@deleteJob');

Route::post('deletejform', 'HandymanController@deletejForm');

});

public function up()
{
    Schema::create('handymen', function (Blueprint $table) {
        $table->increments('id');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('street');
        $table->string('postcode');
        $table->string('town');
        $table->string('skills');


        $table->integer('job_id')->unsigned();
        $table->foreign('job_id')->references('id')->on('jobs')->onDelete('cascade');


        $table->timestamps();
        });
    }
----

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('handymen', function (Blueprint $table) {
        $table->dropForeign('handymen_job_id_foreign');
        $table->dropColumn('job_id');
    });
}

} If any other files are needed I will update the page when requested, please help me here

1 Answer 1

1

Change this

 <input type='checkbox' value='{{$job->id}}' name='jobs[]'/>

to

  <input type='checkbox' value='{{$job->id}}' name='job_id'/>
 <input type="hidden" name="handymanid" value="{{$skilledHandyman->id}}">

and in the controller

    function jobassign(Request $request)
    {
         $job_id = $request->input('job_id');
         $handymanId = $request->input('handymanid');
        $job = Handyman::where('id', $handymanId)->update(['job_id', $job_id]);
        return redirect()->back()->with('status', trans('Handyman has been successfully assigned to this job.'));
    }

in ur routes file change the form action

<form action="{{url('jobassign')}}" method="POST">
Sign up to request clarification or add additional context in comments.

8 Comments

Hey thank you for reply, I have changed the code according to your alterations and I get this: NotFoundHttpException in RouteCollection.php line 161: Link looks like this:localhost/assign2/public/…, any suggestions on that one?
share ur routes file
One last problem, when I click submit button i get: SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: update handymen set 0 = job_id, 1 = 2, updated_at = 2016-04-14 08:10:49 where id = 1). I have added my databases, job_id is column 10 and that's the only column that needs updating
i updated my answer i changed Handyman::where('handymen_id', $handymanId) because its only "id" on the schema and updated ur migration
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.