2016-05-13 4 views
0

Я унаследовал 4 MySQL таблицы:Eloquent belongsToMany withPivot отображение

перечислений
-id
-description
...

локаций
-id
-listing_id

направляющие
-id
-name
....

guide_location
-id
-guide_id
-location_id

Листинг => (много) Местоположение
Guide => (many) Местоположение => (1) Листинг

Листинг, расположение и руководство - это собственная модель в приложении Laravel Dingo. Вот установка:

//Listing model 
public function locations() 
{ 
    return $this->hasMany('Location'); 
} 

Тогда

//Location model 
public function guides() 
{ 
    return $this->belongsToMany('Guide'); 
} 
public function listing() 
{ 
    return $this->belongsTo('Listing'); 
} 

И

//Guide model 
public function locations() 
{ 
    return $this->belongsToMany('Location'); 
} 

Я добавил столбец guide_location, и я хочу, чтобы вернуть его, когда я выбираю Руководство от база данных.

Итак:

guide_location
-id
-guide_id
-location_id
-положении

Я попытался добавления ->withPivot('position') к обоим belongsToMany() заявления в руководстве и местоопределении моделей но он не работает, я не вижу новый столбец.

Любые идеи, что я делаю неправильно?

+0

Я немного смущен, если вы только что добавили столбец, зачем вам поворачиваться в другую таблицу? Или вы впервые представили пятую таблицу, и когда вы запрашиваете «Руководство», которое возвращает «Местоположение руководства», тогда вы также хотите, чтобы «Guide Location» возвращалось с результатом «отношений позиции» ? – Ohgodwhy

+0

Может быть, с Pivot это не команда, в которой я нуждаюсь? Из [docs] (https: // laravel.com/docs/5.1/eloquent-relationship), он предположил, что это единственный способ получить эту другую ценность, если я не ошибаюсь в ней. «По умолчанию на сводном объекте будут присутствовать только ключи модели. Если ваш опорный элемент таблица содержит дополнительные атрибуты, вы должны указать их при определении отношения: « – OrdinaryHuman

+0

Это справедливо только в том случае, если вы используете сводную таблицу, но вы не в этом случае,« guide_location »не является сводной таблицей и не является даже Polymorphic, у него просто много ограничений. если я запрошу '$ guide = Guide :: find ($ id) -> с ('guide_location');' Я бы ожидал увидеть столбец 'position' в моем возвращении, учитывая код, который вы предоставили выше. У вас фактически есть таблица «позиция», которую вы пытаетесь объединить в таблицу «guide_location»? – Ohgodwhy

ответ

0

OK, ->withPivot() работал, я просто не видел результат, потому что он был в location.pivot.position, а не location.position. Тупой.

Надеюсь, это поможет другим.

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