2015-11-23 5 views
0

Я довольно новичок в Laravel, и я начинаю строить отношения. У меня есть некоторые из довольно простых вещей довольно быстро, но я борюсь с чем-то более продвинутым.Laravel - Отношения, три слоя

По сути, у меня есть три вещи:

  • Контакты
  • Моменты
  • Голы

Под каждого контакта можно сохранить моменты, разные вещи, которые я сделал с указанным Contact. Каждый Момент также может быть связан с Целью.

Теперь я пытаюсь создать страницу, на которой будут отображаться все мои цели, под которыми появятся каждый из моих Моментов, и за каждый момент я хочу получить основную информацию о том, к кому привязан момент.

Вот как мои таблицы настройка:

Голов таблица:

- id - Goal name - Goal description 

Моменты таблица:

- id - userId - goalId - Moment name - Description 

стол пользователя

- id - firstname - lastname 

Так что я получил :

class Goal extends Model 
{ 

    public function contact() { 
     return $this->belongsTo('App\Contact'); 
    } 

    public function moments() { 
     return $this->hasMany('App\Moment', 'goalId'); 
     } 
} 

И я попытался следующий код, чтобы получить все результаты:

$goals = Goal::with('moments', 'contact') 
     ->where('authId', Auth::id()) 
     ->where('hidden', 'false') 
     ->get(); 

    dd($goals); 

Но все контакты возвращаются утратившими ... Я пробовал разные вещи, но не смогли Покажите это еще раз.

Использует ли hasManyThrough или что-то в этом роде?

Редактировать: Таким образом, я смог собрать все это вместе, но не в том порядке, в котором я хочу. Использование:

public function contact() { 
    return $this->belongsTo('App\Contact', 'userId'); 
} 

public function goal() { 
    return $this->belongsTo('App\Goal', 'goalId', 'id'); 
} 


$moments = Moment::with('goal', 'contact') 
     ->where('authId', Auth::id()) 
     ->where('hidden', 'false') 
     ->get(); 

    dd($moments); 

теперь у меня есть $ моменты объект, который содержит ссылки на правильную цель и контакт, за исключением того, я хочу, чтобы иметь возможность сортировать его по цели, это возможно?

Благодарим за помощь!

Приветствия, Все


решаемые

решаемые его с помощью следующих действий:

public function contacts() { 
    return $this->hasMany('App\Contact', 'id', 'userId'); 
} 

public function moments() { 
    return $this->hasMany('App\Moment', 'goalId'); 
} 

    $goals = Goal::with('moments', 'moments.contact') 
     ->where('authId', Auth::id()) 
     ->where('hidden', 'false') 
     ->get(); 

    dd($goals); 
+0

как, цель и связанный контакт? внешний ключ? если так, я не могу найти его в ** - id - Название цели - Описание цели **. Laravel, как правило, ожидают, что contact_id существует в таблице целей. –

+0

Код для ваших контактных отношений в настоящее время предполагает наличие поля 'contact_id' в таблице' goals'. Это так? – patricus

+0

Нет, если он существует, попытался запустить его без вашего предложения where? я подозреваю, что что-то делать со строкой, связанной где. –

ответ

1

решаемые

решить ее, используя следующие:

public function contacts() { 
    return $this->hasMany('App\Contact', 'id', 'userId'); 
} 

public function moments() { 
    return $this->hasMany('App\Moment', 'goalId'); 
} 

    $goals = Goal::with('moments', 'moments.contact') 
     ->where('authId', Auth::id()) 
     ->where('hidden', 'false') 
     ->get(); 

    dd($goals); 
Смежные вопросы