A new feature just merged into Laravel and included in the v5.4.8 update is the ability to define Macros for Eloquent Relationships. To better show how this feature works here is a screenshot by Jordan Pittman who created the original pull request:
Here is that same example in a copy and paste friendly version.
AppServiceProvider
use Illuminate\Database\Eloquent\Relations\HasOne; //... public function boot(){ HasMany::macro('toHasOne', function() { return new HasOne( $this->query, $this->parent, $this->foreignKey, $this->localKey ); });}
User Model
public function logins(){ return $this->hasMany(Login::class);} public function lastLogin(){ return $this->logins()->latest()->toHasOne();}
Results
$user = App\User::find(1);$user->logins()->first()->id; // 1$user->logins()->count(); // 2$logins = $user->lastLogin->id; // 2
Of course, this is just one example, and it should allow for some unique use cases in your applications.