Reputation: 95
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
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