2017-06-13 90 views
0

是否可以創建一個快速方法以從一對多關係中返回第一個模型?這裏是我的代碼,從模型文件:從Laravel的hasMany關係中返回第一個模型

public function books() { 
    return $this->hasMany('App\Models\Book'); 
} 

public function first_book() { 
    return $this->book()->first(); 
} 

這是我得到的錯誤:

'Call to undefined method Illuminate\Database\Query\Builder::addEagerConstraints()'

我想用這個的原因是,這樣我可以收集第一使用with()方法記錄,例如:

$authors = Author::with('first_book')->select('*'); 

我在Datatables中使用這些記錄。

回答

1

要使用with()您的方法必須從關係方法返回一個集合,因爲您的關係是hasMany。所以,你可以做的是:

public function books() { 
    return $this->hasMany('App\Models\Book'); 
} 

public function first_book() { 
    return $this->hasMany('App\Models\Book')->limit(1); 
} 

這將返回一個集合與您的第一個項目,所以你還是要調用first()

$authors = Author::with('first_book')->select('*'); 
$authors->first_book->first(); 
+0

我會替換返回$ this-> hasMany('App \ Models \ Book') - > limit(1);返回$ this-> books() - > limit(1); – Brad

0

一個關係,可以是急於裝了回一個問題。 first()函數返回一個雄辯的對象。

的解決方案是限制這個查詢的結果的數量,像這樣:

public function first_book() { 
    return $this->books()->take(1); 
} 

$author->first_book仍然將是一個集合,但它只會包含第一個相關的書在你的數據庫。

0

一對一的關係是一個非常基本的關係。例如

public function books() 
    { 
     return $this->hasOne('App\Models\Book'); 
    }