繁体   English   中英

Laravel /雄辩的渴望加载

[英]Laravel / Eloquent eager loading

对于某些人来说,这将是一个简单的问题,但是我似乎无法在线或在文档中找到答案(仅是我不想要的变体)。

  • 可以说我们有一个Question
  • 每个Question对象可以选择具有多个Tag

我已经设置好了类,并且一切正常。 目前,我使用:

  • $questions = Question::all();

这可以按预期工作,但是不急于加载。

需要明确的是: $question->tags提供了我期望的数组。 没有关系问题。

由于新的要求,我将创建一个可能包含成千上万个问题的视图,因此必须急于加载。

我尝试使用:

  • $questions = Question::with('tag')->all();

给出错误信息:

Builder.php第2345行中的BadMethodCallException:调用未定义的方法Illuminate \\ Database \\ Query \\ Builder :: all()

每个教程或我谷歌渴望加载的方法,要么指定一个ID,要么是有关如何仅显示带孩子的父母的教程。

我简单地想要“所有人和他们的孩子”。

这必须很容易..有人知道怎么做吗?

谢谢里克

您应该在模型中定义方法。 据我所知,您将有一对多的关系。 那将是

class Question extends Model
{
    public function tags()
    {
        return $this->hasMany('App\Tag');
    }
}

标签类别

class Tag extends Model
{
    public function question()
    {
        return $this->belongsTo('App\Question');
    }
}

和控制器。 代替all()使用get()方法。

$questions = Question::with('tags')->get();

正如我在Question模型中定义tags方法一样。 Question::with('tags')应该调用它。 相反,如果您要执行Question::with('tag') ,则应该在Question模型中定义tag方法。

注意s

我已经将两个答案都标记为正确:建议的原始语法正确,而引起的类名问题是最后一个问题。 谢谢大家:

$questions = Question::with('tags')->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM