2017-02-03 4 views
1

Так что я 2 модели, пользователь & профиля, связь устанавливается следующим образом:Laravel hasOne через сводную таблицу

/** 
    * User belongs to many Profile 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\belongsToMany 
    */ 
    public function profiles() 
    { 
     return $this->belongsToMany('App\Models\Profile', 'user_profiles'); 
    } 

У меня есть 3 таблицы, пользователи, профили & user_profiles (сводная таблица)

У меня есть столбец в моей таблице пользователей с именем active_profile, который заполняется идентификатором профиля.

Как я могу установить связь, так что я могу назвать что-то вроде следующего:

$user->active_profile

Так что он будет возвращать всю информацию о профиле для идентификатора, установленного в active_profile?

+0

Помогла ли вам одна из приведенных сообщений? –

ответ

0

Вы можете добавить метод в вашей User модели, как это:

public function active_profile() 
{ 
    return $this->profiles() 
      ->find($this->active_profile); 
} 

, а затем вы можете вызвать метод как $ пользователю -> active_profile();

0

Вы должны быть в состоянии захватить ресурс, используя find

$user->profiles()->find($user->active_profile); 
+0

Хотя это работает, я надеялся на более элегантное решение, предпочтительно используя красноречивые отношения. Я пока буду применять ваше решение, но хотел бы оставить вопрос открытым для других вариантов на некоторое время. – ChrisBratherton

1

Я мог ошибаться, но почему бы просто не использовать отношения belongsTo?

public function active_profile() 
{ 
    return $this->belongsTo('App\Models\Profile', 'active_profile'); 
} 

Надеюсь, это поможет!

Смежные вопросы