2013-01-01 27 views
1

使用L3以下工作正常:Laravel預先加載時與第一(鏈缺失的關係)/全部()

$r = Site::with('services')->get() 

返回我期望什麼。一組Site對象,與服務關係全部整齊地填充。

然而,相反如果我只用了以下內容:

$r = Site::with('services')->first() 

$r = Site::with('services')->all() 

的網站對象的關係是完全空的。

這對我來說就像是一個bug,但是我想要做什麼?此刻得到與使用first()代替get()相同的效果,我不得不從返回的數組中拉出第一個元素。

回答

2

首先,使用->first()應該按預期工作。再試一次,我有,它的工作原理。如果它不適合你,請檢查你的版本。我的是3.2.10。

->all()不應該這樣工作,它只是一個簡單的捷徑。 docs say檢索整個表格,使用靜態all方法。請注意,這是一種靜態方法,您正在對象上下文中使用它。但無論如何,你可以忘記這一點,並使用->get(),那有什麼問題?

如果你看看源代碼laravel/database/eloquent/model.php,你會看到這一點:

public static function all() 
{ 
    return with(new static)->query()->get(); 
} 

正如你所看到的,這個函數只是創建了一個新的Model,然後檢索所有行。