为啥 laravel 雄辩的关系返回空数组

Posted

技术标签:

【中文标题】为啥 laravel 雄辩的关系返回空数组【英文标题】:Why laravel eloquont relation returning empty array为什么 laravel 雄辩的关系返回空数组 【发布时间】:2021-06-20 23:58:13 【问题描述】:
My Relationship is 

    public function QuestionOptions()
    
        return $this->hasMany('App\Models\QuestionOption','QuestionId');
    

but when i am running this query 

        $builder = Question::select([
            'id', 'type', 'questionText', 'note', 'solutionText',
        ])->with('QuestionOptions')
        ->orderByRaw("RAND()")
        ->skip(0)
        ->take(1)
        ->get()
        ->toArray();

i am getting this 

    
        "id": 1,
        "type": "multiple",
        "questionText": "2 + 2 = ?",
        "note": null,
        "solutionText": null,
        "question_options": []
    ,

so i want to know why i am getting question_options empty is there any problem in my query?

更改后:-

我尝试更改我的查询并删除了选择,所以现在我的查询看起来像这样

        $builder = Question::with('QuestionOptions')
        ->orderByRaw("RAND()")
        ->skip(0)
        ->take(1)
        ->get()
        ->toArray();

运行查询后,我的输出如下所示,我得到了两个表的所有字段,这没问题,但现在出现了问题,我应该如何只获取特定字段

   [
        "Id": 2,
        "UID": "123456789098765",
        "Type": "single",
        "Rank": 2,
        "QuestionText": "4 + 4 = ?",
        "TotalMarks": 5,
        "Note": null,
        "SolutionText": null,
        "Status": "active",
        "TimeStamp": "2020-11-17 12:04:18",
        "NegativeMark": 2,
        "TestId": 4,
        "question_options": [
            
                "Id": 13,
                "OptionText": "5",
                "Rank": 1,
                "IsAnswer": "no",
                "Status": "deactive",
                "TimeStamp": "2020-11-17 12:59:14",
                "QuestionId": 2
            ,]

【问题讨论】:

迁移是什么样的?问题和/或 question_options 的外键字段的名称是什么? 我的问题表包含 -> id,type,rank,questionText,totalMarks,status,testId 我的 questionOption 表包含 -> id,optionText,rank,IsAnswer,status,questionId 【参考方案1】:

试试这个,


       $builder = Question::with('QuestionOptions')
        ->orderByRaw("RAND()")
        ->skip(0)
        ->take(1)
        ->get(['id', 'type', 'questionText', 'note', 'solutionText'])
        ->toArray();

【讨论】:

但 questionId 不在表中,所以会抛出错误 Illuminate\Database\QueryException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'QuestionId'在'字段列表' (SQL:从test_question中选择idtypequestionTextnotesolutionTextQuestionId 那是我的错,你可以在 get() 中指定字段的名称。你只得到特定的字段。请参阅我更新的答案。试试这个。我希望这是有效的。 感谢您的努力,但没有帮助:( 实际上当我尝试获取特定列时出现问题,我尝试了相同的方法而不使用 select 然后我从两个表中获取了所有字段

以上是关于为啥 laravel 雄辩的关系返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

为啥 laravel 返回一个空数组来表示一个有很多关系?

Laravel 5 雄辩的多对多关系问题

laravel 雄辩的关系一对多返回 null

Laravel 5 具有雄辩的关系回调函数返回错误记录

如何从 hasManyThrough 雄辩关系返回 Laravel 中的单个模型

Laravel 和雄辩的返回结果来自多对多关系