Paul Gwamanda
Paul Gwamanda

Reputation: 95

How to update records laravel 5

I have related tables in my database and i'm able to create a record with it's foreign keys successfully, but i cant figure out how to edit and update that record

Below is my store code that gets the inputs from my form:

    public function store(Request $request){
    $account = new Account;
    $type = new Type;
    $agency = new Agency;
    $client = new Client;

    $agency->name = $request->input('agency_name');
    $agency->save();
    $type->name= $request->input('type_name');
    $type->save();
    $client->name= $request->input('client_name');
    $client->save();

    $account->client()->associate($client);
    $account->type()->associate($type);
    $account->agency()->associate($agency);

    $account->username = $request->username;
    $account->password = $request->password;
    $account->save();

    return redirect('accounts');
    }

The above stores the record successfully, but i dont know how to edit it, the below pulls the account data in my edit fields but doenst show the account_id field, type_id and client_id fields they are blank:

public function edit(Request $request, $id)
{
    $account=Account::find($id);
    return view('accounts.edit',compact('account'));
}

my update code, what goes here?

public function update(Request $request, $id)
{
    // ???
    return redirect('accounts');

}

Upvotes: 1

Views: 114

Answers (1)

atefth
atefth

Reputation: 1623

So, you should change your store function like this -

public function store(Request $request)
{
    $account = new Account;

    $type = Type::whereName($request->type_name);
    if (!is_null($type)) {
        $type = $type->first();
    }else{
        $type = Type::create(['name' => $request->type_name]);
    }
    $agency = Agency::whereName($request->agency_name);
    if (!is_null($agency)) {
        $agency = $agency->first();
    }else{
        $agency = Agency::create(['name' => $request->agency_name]);
    }
    $client = Client::whereName($request->client_name);
    if (!is_null($client)) {
        $client = $client->first();
    }else{
        $client = Agency::create(['name' => $request->client_name]);
    }

    $account->client()->associate($client);
    $account->type()->associate($type);
    $account->agency()->associate($agency);

    $account->site_url = $request->site_url;
    $account->login_url = $request->login_url;
    $account->username = $request->username;
    $account->password = $request->password;
    $account->server_ip = $request->server_ip;
    $account->database = $request->database;
    $account->other = $request->other;
    $account->save();
    return redirect('accounts');
}

Now, once you add an account and open the edit form, you should be able to see the type, agency & client.

As for the update method, you need to do something like this (assuming you're passing in agency, type & client -

public function update(Request $request, $id)
{
    $account = Account::find($id);
    $type = Type::whereName($request->type['name']);
    if (!is_null($type)) {
        $type = $type->first();
    }else{
        $type = Type::create(['name' => $request->type['name']]);
    }
    $agency = Agency::whereName($request->agency['name']);
    if (!is_null($agency)) {
        $agency = $agency->first();
    }else{
        $agency = Agency::create(['name' => $request->agency['name']]);
    }
    $client = Client::whereName($request->client['name']);
    if (!is_null($client)) {
        $client = $client->first();
    }else{
        $client = Agency::create(['name' => $request->client['name']]);
    }

    $account->client()->associate($client);
    $account->type()->associate($type);
    $account->agency()->associate($agency);

    $account->site_url = $request->site_url;
    $account->login_url = $request->login_url;
    $account->username = $request->username;
    $account->password = $request->password;
    $account->server_ip = $request->server_ip;
    $account->database = $request->database;
    $account->other = $request->other;
    $account->save();

    $request->session()->flash('alert-success', 'Account successfully updated');
    return redirect('accounts');
}

Upvotes: 1

Related Questions