2014-03-27 29 views
0

我有以下查詢其擊敗的廢話了我的數據庫,因爲它使每一種關係AA單查詢:Laravel4預先加載不可能

$projects = $this->project->all()->sortBy(function ($item) { 
    return $item->votes()->count(); 
    }, SORT_REGULAR, true)->take(30); 

我嘗試了許多不同的方法:

$projects = $this->project->with('Vote')->all()->sortBy(...)->take(30); 調用未定義的方法照亮\數據庫\查詢\生成器::所有()

$projects = $this->project->with('Vote')->get()->sortBy(...)->take(30); 調用未定義的方法照亮\數據庫\查詢\生成器::投票()

...

在模板中,我遍歷項目,並使用$project->votes()->count()

什麼是應該做的預先加載正確的方法是什麼?

+0

對不起!我刪除了答案,因爲它不起作用,我會發布,如果我可以使它工作。 –

+1

謝謝你的努力,但我會嘗試一種不同的解決方案! – Strernd

回答

0

我認爲問題可能是中間的all()。嘗試擺脫all()並在最後加入get()。此外,您可以使用例如Project::做出一個Eloquent查詢,如果你不想調用一個實例。

$projects = Project::with('vote')->sortBy(...)->take(30)->get(); 

這應該解決它,我想。如果您不需要任何其他項目數據,而是需要投票,那麼您可能也可以執行groupBy而不是循環執行所有操作,然後執行count()

+1

這給了我'調用未定義的方法Illuminate \ Database \ Query \ Builder :: sortBy()' – Strernd

+0

使用'Project ::'而不是'$ this-> project',這是否工作?你確定你已經創建了一個延伸雄辯的「項目」模型嗎? –

+0

我有不同的項目模型,這就是爲什麼我得到我的項目模型像這樣的'公共職能__construct(){ $ this-> project = App :: make('Project'); }' 適用於所有其他用途,不能說如果這是問題。 – Strernd