Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

sunrise's avatar

How to write the controller of this questionnaire demo?

I am using Laravel 5.2 , How to write the controller of this questionnaire demo below:

There are 3 tables, respondents,sports, they have a "many-to-many" relationship,another one is sport_respondent,which is the relational table of the former two.

respondents

id   name   email

sports

id   sport_name
1    Basketball
2    Football
3    Table tennis
4    Badminton
5    Baseball
6    Swimming

sport_respondent

id   respondent_id   sport_id

view:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <link href="//cdn.bootcss.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" rel="stylesheet">
    <link href="//cdn.bootcss.com/tether/1.3.2/css/tether.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
    <form>
        <fieldset class="form-group">
                <label for="name">Name</label>
                <input type="text" class="form-control" id="name" name="name" placeholder="">
            </fieldset>
            <fieldset class="form-group">
                <label for="email">Email</label>
                <input type="email" class="form-control" id="email" name="email" placeholder="">
            </fieldset>
        <div class="checkbox row">
            <label class="checkbox-inline col-xs-3">
                <input type="checkbox" id="sport1" name="sport[]" value="1">Basketball
            </label>
            <label class="checkbox-inline col-xs-3">
                <input type="checkbox" id="sport2" name="sport[]" value="2">Football
            </label>
            <label class="checkbox-inline col-xs-3">
                <input type="checkbox" id="sport3" name="sport[]" value="3">Table tennis
            </label>
            <label class="checkbox-inline col-xs-3">
                <input type="checkbox" id="sport4" name="sport[]" value="4">Badminton
            </label>
            <label class="checkbox-inline col-xs-3">
                <input type="checkbox" id="sport5" name="sport[]" value="5">Baseball
            </label>
            <label class="checkbox-inline col-xs-3">
                <input type="checkbox" id="sport6" name="sport[]" value="6">Swimming
            </label>
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
    </form>
</div>
<script src="//cdn.bootcss.com/jquery/2.2.3/jquery.min.js"></script>
<script src="//cdn.bootcss.com/tether/1.3.2/js/tether.min.js"></script>
<script src="//cdn.bootcss.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"></script>
</body>
</html>

Question:How to write the controller below?

public function store(Request $request)
{
    $respondent= new Respondent;
    $respondent->name = $request->name;
    $respondent->email = $request->email;
    $respondent->save();

    $sport = new Sport;
    //how to write here?
    return redirect()->action('RespondentController@index');
}
0 likes
2 replies
vinodrajput's avatar

@sunrise

public function store(Request $request) { $respondent= new Respondent; $respondent->name = $request->name; $respondent->email = $request->email; $respondent->save();

$respondent->sports()->sync($request->sport);
return redirect()->action('RespondentController@index');

}

sunrise's avatar

@vinodrajput

this is the new store method,


    public function store(Request $request)
    {
        $respondent= new Respondent;
        $respondent->name = $request->name;
        $respondent->email = $request->email;
    
        $respondent->sports()->sync($request->sport);

        $respondent->save();

        return redirect()->action('RespondentController@index');
    }

there is an infomation when running it,

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'respondent_id' cannot be null (SQL: insert into `sport_respondent` (`respondent_id`, `sport_id`) values (, 1))

it shows that respondent_id is needed,I don't know how to add it,some help please.

Please or to participate in this conversation.