【问题标题】:Retrieving the data from MySql, Laravel从 MySql、Laravel 中检索数据
【发布时间】:2019-09-13 09:26:42
【问题描述】:

我有两张表,一张用于问题,一张用于选项。 所有问题都将保存在问题表中。

问题表:

id | questions                                       | created_on 
1  | Who is the world champianship on 2016 World cup?| 13-09-2016
2  | Who won the FiFA world cup?                     | 13-09-2019

选项表:

id | question_id | option_text
1  | 1           | Pakistan
2  | 1           | India
3  | 1           | Australia
4  | 1           | Srilanka
5  | 2           | Canada
6  | 2           | Russia
7  | 2           | Germany
8  | 2           | France

这是桌子:

我希望 json 响应格式如下:

[
{
    "question": "Who is the world champianship on 2016 World cup",
    "created_on": "2019-09-13",
    "question_id": 1,
    "options":[ 
    {"option_text": "Pakistan"},
    {"option_text": "India"},
    {"option_text": "Australia"},
    {"option_text": "Srilanka"}
    ]
},
{
    "question": "Who won the FiFA world cup?",
    "created_on": "2019-09-13",
    "question_id": 2,
    "options":[ 
    {"option_text": "Canada"},
    {"option_text": "Russia"},
    {"option_text": "Germany"},
    {"option_text": "France"}
    ]
}
]

但是在我下面的 SQL 查询中

    $records = DB::table('tbl_questions')
        ->where('created_on', '=', date('Y-m-d'))
        ->leftJoin('tbl_options', 'tbl_options.question_id', '=', 'tbl_questions.id')->get();

返回以下响应:

[
 {
     "question": "Who is the world champianship on 2016 World cup",
    "created_on": "2019-09-13",
    "question_id": 1,
     "option_text": "Pakistan"

 },
 {
   "question": "Who is the world champianship on 2016 World cup",
    "created_on": "2019-09-13",
    "question_id": 1,
    "option_text": "India"
 },
 {
 "question": "Who is the world champianship on 2016 World cup",
    "created_on": "2019-09-13",
    "question_id": 1,       
    "option_text": "Australia"
 },
 {
    "question": "Who is the world champianship on 2016 World cup",
    "created_on": "2019-09-13",
    "question_id": 1,
    "option_text": "Srilanka"
  },
  {
   "question": "Who won the FiFA world cup?",
    "created_on": "2019-09-13",
    "question_id": 2,
    "option_text": "Canada",
  },
  {
    "question": "Who won the FiFA world cup?",
    "created_on": "2019-09-13",
    "question_id": 2,
    "option_text": "Russia",
    },
    {
    "question": "Who won the FiFA world cup?",
    "created_on": "2019-09-13",
    "question_id": 2,
    "option_text": "Germany",
    },
    {
    "question": "Who won the FiFA world cup?",
    "created_on": "2019-09-13",
    "question_id": 2,
    "option_text": "France"
    }
 ]

任何人都可以帮助我获得预期的 json 响应。我们将不胜感激。

【问题讨论】:

  • 您必须使用One to Many 关系。这意味着一个问题可以有多个选项,并且要实现您的系统应该有 3 个表,例如 questionsoptionsquestion_options。最后一张表将用作问题和选项表的数据中心。

标签: mysql laravel


【解决方案1】:

定义您的模型并将选项添加为关系。

Class Question extends Model
{
    public function Options()
    {
        return $this->hasMany(Option::class);
    }
}

在您的控制器中执行此操作。

public function questions()
{
    return Question::with('options')->where('created_on', '=', date('Y-m-d')->get();
}

【讨论】:

  • 我是 Php laravel 的新手。你能解释一下哪个是型号吗?哪个是关键字?
  • 我得到...但在 $this 上找不到。
  • 它说不能在文件中实例化抽象类 PhpOption\Option
  • 你必须在你的模型中加入 Options() 函数
  • 您需要在 Use App\Option 或您保存它的位置包含选项模型,然后创建一个选项模型。
【解决方案2】:

请尝试改用 Eloquent 关系。 Refer Documentation Link Here

使用它我们可以定义模型之间的某些关系,其中有不同的类型。在您的情况下,它是一对多的关系,至于一个问题,有很多选择 首先,您需要在模型中定义关系和,如下所示 在控制器中,您将使用以下命令获得结果 -

$result = Questions::with('options')->get()

这将是您的问题模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Questions extends Model
{

    public function options()
    {
        return $this->hasMany('App\Model\Options');
    }
}

【讨论】:

  • 我是 Php laravel 的新手。能否请您多解释一下。
  • 使用这个我们可以定义模型之间的某些关系,其中有不同的类型。在您的情况下,它是一对多关系,至于 一个问题有很多选项 首先,您需要在模型中定义关系并将结果作为 - $result = QuestionsModel::with ('选项')->get();
【解决方案3】:

在 Question 模型中创建一个 hasMany 关系。像这样

public function options() { return $this->hasMany('App\Option'); }

并在查询中使用 with 函数来检索这样的选项

$records = DB::table('tbl_questions')
    ->where('created_on', '=', date('Y-m-d'))
    ->with('options')
    ->get();

【讨论】:

  • 试过了。不工作。这里的选项是选项表名称正确吗?
  • @Noorul 不是 laravel 关系方法名。
  • 我得到... $this 上没有找到
  • 将选项函数放入模型中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 2012-04-07
  • 2017-08-02
  • 2013-03-24
  • 1970-01-01
  • 2013-09-05
相关资源
最近更新 更多