PHP,Laravel-为以下数据构造代码

PHP,Laravel-为以下数据构造代码,php,laravel,laravel-5,laravel-5.3,Php,Laravel,Laravel 5,Laravel 5.3,我有两张桌子 问题带有列id(PK),名称 及 答案带有列id(PK),问题id(FK),答案,答案2,答案3,答案4 我得到的数据是,每个问题都有多个答案 通过Laravel将其插入DB的最佳方式是什么 我试过了,但没有成功。你应该了解拉威尔的关系: 在您的情况下,这将是一对多关系(一个问题-多个答案) 您应该了解Laravel关系: 在您的情况下,这将是一对多关系(一个问题-多个答案) 下面是一个示例:请注意,实际上没有测试任何代码块 数据库结构: 问题:id、姓名(一个问题有很多答案

我有两张桌子

问题
带有列
id(PK)
名称

答案
带有
id(PK)
问题id(FK)
答案
答案2
答案3
答案4

我得到的数据是,每个问题都有多个答案

通过Laravel将其插入
DB
的最佳方式是什么


我试过了,但没有成功。

你应该了解拉威尔的关系:


在您的情况下,这将是一对多关系(一个问题-多个答案)

您应该了解Laravel关系:

在您的情况下,这将是一对多关系(一个问题-多个答案)

下面是一个示例:请注意,实际上没有测试任何代码块

数据库结构:

问题:id、姓名(一个问题有很多答案)

答案:id、问题id、姓名(答案属于问题)

我已经编写了2个模型文件和一个Http控制器文件:

问题模型:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Question Extends Model
{
    // Relation
    public function answers()
    {
        return $this->hasMany(Answer::class);
    }
}
<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Answer Extends Model
{
    // Relation
    public function question()
    {
        return $this->belongsTo(Question::class);
    }
}
| answer_id | question_id |
| --------- | ----------- |
|    1      |      2      | 
对于可以更改请求参数的人员,更好的方法是:

如果可以,请更改请求,如下所示:

{
    "questions": [
        {
            "name": "What ever",
            "answers": [
                {"name": "answer 1 of this question"},
                {"name": "answer 2 of this question"}
            ]
        },
        {
            "name": "What ever 2",
            "answers": [
                {"name": "answer 1 of this question"},
                {"name": "answer 2 of this question"}
            ]
        }
    ]
}
这将对以后解析它们有很大帮助

<?php
namespace App\Http\Controllers;

use App\Question;
use Illuminate\Http\Request;

class AlternateQuestionsController Extends Controller
{
    public function store(Request $request)
    {
        foreach($request->input("questions", []) as $questionPayload) {
            $question = Question::create(["name" => $questionPayload["name"]);

            foreach($questionPayload["answers"] as $answerPayload) {
                if(is_array($answerPayload)) {
                    $question->answers()->create(["name" => $answerPayload["name"]])
                }
            }
        }
    }
}
以下是一个示例:请注意,实际上没有测试任何代码块

数据库结构:

问题:id、姓名(一个问题有很多答案)

答案:id、问题id、姓名(答案属于问题)

我已经编写了2个模型文件和一个Http控制器文件:

问题模型:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Question Extends Model
{
    // Relation
    public function answers()
    {
        return $this->hasMany(Answer::class);
    }
}
<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Answer Extends Model
{
    // Relation
    public function question()
    {
        return $this->belongsTo(Question::class);
    }
}
| answer_id | question_id |
| --------- | ----------- |
|    1      |      2      | 
对于可以更改请求参数的人员,更好的方法是:

如果可以,请更改请求,如下所示:

{
    "questions": [
        {
            "name": "What ever",
            "answers": [
                {"name": "answer 1 of this question"},
                {"name": "answer 2 of this question"}
            ]
        },
        {
            "name": "What ever 2",
            "answers": [
                {"name": "answer 1 of this question"},
                {"name": "answer 2 of this question"}
            ]
        }
    ]
}
这将对以后解析它们有很大帮助

<?php
namespace App\Http\Controllers;

use App\Question;
use Illuminate\Http\Request;

class AlternateQuestionsController Extends Controller
{
    public function store(Request $request)
    {
        foreach($request->input("questions", []) as $questionPayload) {
            $question = Question::create(["name" => $questionPayload["name"]);

            foreach($questionPayload["answers"] as $answerPayload) {
                if(is_array($answerPayload)) {
                    $question->answers()->create(["name" => $answerPayload["name"]])
                }
            }
        }
    }
}

我建议一种可能对您有所帮助的方法。您可以创建一个中间表,用于保持问题答案模型之间的关系

问题\答案:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Question Extends Model
{
    // Relation
    public function answers()
    {
        return $this->hasMany(Answer::class);
    }
}
<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Answer Extends Model
{
    // Relation
    public function question()
    {
        return $this->belongsTo(Question::class);
    }
}
| answer_id | question_id |
| --------- | ----------- |
|    1      |      2      | 
并检索以下问题的答案:

Question::find($questionId)->answer()->get();
or
Question::find($questionId)->answer;
在您的问题中模型添加此方法:

public function answer()
    {
        return $this->belongsToMany('App\Answer','question_answer','answer_id ','question_id ');
    }
如果你看看这一页,你会了解更多


我建议一种可能对你有帮助的方法。您可以创建一个中间表,用于保持问题答案模型之间的关系

问题\答案:

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Question Extends Model
{
    // Relation
    public function answers()
    {
        return $this->hasMany(Answer::class);
    }
}
<?php
namespace App;

use Illuminate\Database\Eloquent\Model;

class Answer Extends Model
{
    // Relation
    public function question()
    {
        return $this->belongsTo(Question::class);
    }
}
| answer_id | question_id |
| --------- | ----------- |
|    1      |      2      | 
并检索以下问题的答案:

Question::find($questionId)->answer()->get();
or
Question::find($questionId)->answer;
在您的问题中模型添加此方法:

public function answer()
    {
        return $this->belongsToMany('App\Answer','question_answer','answer_id ','question_id ');
    }
如果你看看这一页,你会了解更多


有代码块吗?@HilmiErdemKEREN错误的代码块匹配。。。我正在写入和删除代码:(有代码块吗?@HilmiErdemKEREN坏代码块伙伴…我正在编写和删除代码:(如何?我如何使用关系?您需要先阅读有关雄辩的内容。我不是按照您的方式。您需要保存问题,然后使用他们的模型类逐个回答。如何?我如何使用关系?您需要先阅读有关雄辩的内容。我不是按照您的方式。您需要保存问题,然后逐个回答。如何使用关系?您需要阅读有关雄辩的内容。我不是按照您的方式。您需要保存问题,然后逐一回答。)使用他们的模型类。Mate请求不能更改,这是需要的。是否仍有更改您的
foreach()
?当然有。我也会添加它。请再次检查答案。Mate请求不能更改,这是需要的。是否仍有更改您的
foreach()的方法
?当然有。我也会添加它。请再次检查答案。