https://laravel.com/docs/5.8/eloquent-relationships#one-to-many
In Laravel Documentation, it says:
Remember, Eloquent will automatically determine the proper foreign key column on the Comment model. By convention, Eloquent will take the "snake case" name of the owning model and suffix it with _id. So, for this example, Eloquent will assume the foreign key on the Comment model is post_id.
Like the hasOne method, you may also override the foreign and local keys by passing additional arguments to the hasMany method:
return $this->hasMany('App\Comment', 'foreign_key');
In your case it's the same table, so Laravel is searching a "user_id" inside the user table > There is not.
Add a coach_id column which you fill when a coach is selected(nullable if runner doesn't have one) and specify the coach user id inside of it. Then declare it in your belongsTo and hasMany methods:
class User extends Authenticatable
{
public function coach() // Return Coach
{
return $this->belongsTo('App\User', 'coach_id');
}
public function runners() // Return User
{
return $this->hasMany('App\User', 'coach_id');
}
}