Laravel / Eloquent渴望加载

时间:2016-07-31 22:39:19

标签: php laravel eloquent

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

  • 假设我们有一个# Returns True if End-Of-File is reached def EOF(f): current_pos = f.tell() file_size = os.fstat(f.fileno()).st_size return current_pos >= file_size
  • 每个Question对象可以选择包含多个Question s

我已经设置了类,事情按预期运行。目前我使用:

  • Tag

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

要明确:$questions = Question::all();给出了我期待的数组。没有关系问题。

由于新的要求,我将创建一个可能有数千个问题的视图,所以这个急切的加载是必须的。

我试图使用:

  • $question->tags

提供了错误消息:

  

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

每个教程,或者我谷歌急切加载的方式,要么指定ID,要么是关于如何仅向父母展示子女的教程。

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

这一定很容易..有谁知道怎么做?

由于 瑞克

2 个答案:

答案 0 :(得分:4)

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

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();

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

请注意 s

答案 1 :(得分:0)

我已将两个答案都标记为正确:建议的原始语法是正确的,并且提出的类名称问题是最后一个问题。 谢谢大家:

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