Laravel / Eloquent 预加载

elb*_*8rm 1 php laravel eloquent

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

  • 假设我们有一Question堂课
  • 每个Question对象可以选择有多个Tags

我已经设置了课程,一切都按预期进行。目前我使用:

  • $questions = Question::all();

这按预期工作,但它不会立即加载。

需要明确的是:$question->tags给出了我期望的数组。不存在关系问题。

由于新的要求,我将创建一个可能包含数千个问题的视图,因此这种急切的加载是必须的。

我尝试使用:

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

这给出了错误消息:

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

每个教程,或者我在谷歌上急切加载的方式,要么指定一个ID,要么是一个关于如何只向有孩子的父母显示的教程。

我只是想要“所有人和他们的孩子”。

这一定很容易......有人知道该怎么做吗?

谢谢瑞克

Cha*_*y22 5

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

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

标签类

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

还有控制器。而不是all()使用get()方法。

$questions = Question::with('tags')->get();
Run Code Online (Sandbox Code Playgroud)

正如我tags在模型中定义的方法QuestionQuestion::with('tags')应该称呼它。相反,如果你打算这样做Question::with('tag')tag方法应该在Question模型中定义。

注意s