mercredi 16 mai 2018

Laravel insert into pivot table from form that generates custom fields

I have a website where you can create your own lists and on this lists you can create custom fields that will be on the subscribe form. When a subscriber fills out the form, he gets an email with the confirmation code.

{!! Form::open(array('route' => 'customFields.store')) !!}
<div class="row">
    <div class="col-sm-3">
        
    </div>
    <div class="col-sm-4">
        
    </div>
</div>
<div class="row">
    <div class="col-sm-3">
        
    </div>
    <div class="col-sm-2">
        
    </div>
</div>
<br>


{!! Form::close() !!}

Above is the form for inserting a custom field into the databse. Below you can see the customFields.store method in the controller.

   $this->validate($request, array(
        'field_name' => 'required',
        'data_type' => 'required',
        'subscriber_list_id' => 'required',
    ));

    $customField = new customField;

    $customField->field_name = $request->field_name;
    $customField->data_type = $request->data_type;
    $customField->subscriber_list_id = $request->subscriber_list_id;

    $customField->save();

    Session::flash('success', 'Custom field successfully created!');

    return redirect()->route('customFields.index', $request->subscriber_list_id);

I created a route for a page where a person can fill out this form and gets subscribed to a list. Below is the code on the subscribe page. I get the custumField and subscriberListId values from the controller.

<form action="" method="POST">

<label for="name">Name</label>
<input type="text" name="name"><br>
<label for="email">Email</label>
<input type="email" name="email"><br>
@foreach($customFields as $customField)
    <label for=""></label>
<input type="" name=""><br>
@endforeach
<input type="hidden" name="subscriber_list_id" value=""/>
<input type="submit" name="submit" value="Submit"/>
</form>

When I press submit I get redirected to sendSubscribeMail method, where I get an error saying:

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'custom_field_id' in 'field list' (SQL: insert into custom_field_subscriber (custom_field_id, subscriber_id) values (1, 16)

Here is the code in my sendSubscribeMail method

$customFields = customField::where('subscriber_list_id', Input::get('subscriber_list_id'))->get();

    $customFieldsArray = array();
    foreach($customFields as $customField){
        $customFieldsArray[$customField->field_name] = 'required';
    }
    $validator = array_merge($customFieldsArray, ['name' => 'required', 'email' => 'required', 'subscriber_list_id' => 'required']);
    $this->validate($request, $validator);

    $confirmation_code = str_random(36);
    $subscriber = new Subscriber;

    $subscriber->name = $request->name;
    $subscriber->email = $request->email;
    $subscriber->subscriber_list_id = $request->subscriber_list_id;
    $subscriber->confirmation_code = $confirmation_code;
    $subscriber->confirmed = false;
    $subscriber->save();

    foreach($customFields as $customField) {
        $subscriber->customFields()->attach($customField->id);
    }


    \Mail::send('emails.vertify', ['confirmation_code' => $confirmation_code], function($message) {
        $message->to(Input::get('email'));
        $message->from('test@gmail.com', 'Test');
        $message->subject('Verify your email address');
    });

I have a table called subscribers which can have many customFields, and table customFields can have many subscribers. The problem is when I try to insert the value of a custom field and subscriber and list_id into the pivot table.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire