2015-07-17 4 views
0

Я пытаюсь определить отношения n: m в Laravel, используя Eloquent. У меня есть следующие таблицы приведены:Laravel, Eloquent Отношение n: m

пользователей:

  • ID
  • Foo

вещи

  • ID

users_things

  • thing_id
  • Foo

В моей модели пользователя я определил следующую функцию

public function things() { 
    return $this->hasMany('App\Thing', 'user_things', 'foo', 'thing_id'); 
} 

В Things модели является аналогом

public function users() { 
    return $this->hasMany('App\User', 'user_things', 'thing_id', 'foo'); 
} 

Когда Я звоню в контроллере

$user = User::find(1) //works 
//$thing = Thing::find(1) works 
$things = $user->things(); 
return $things 

я получаю следующее сообщение: «Объект класса Осветите \ Database \ Eloquent \ Отношения \ HasMany не может быть преобразован в строку». Моя проблема заключается в том, что я не могу использовать идентификатор пользователя как внешний ключ в таблице комбинаций. Это должен быть столбец foo.

+0

Ошибка, похоже, не имеет ничего общего с отношениями. Где-то в вашем коде объект преобразуется в строку. Посмотрите на сообщение об ошибке, должно быть имя файла и номер строки, где возникает ошибка. Вставьте эту часть кода. –

+0

Что происходит, когда вы возвращаете dd ($ things)? '$ user-> things()' возвращает экземпляр Collection. Вместо этого используйте динамический атрибут и посмотрите, работает ли: '$ things = $ user-> things;' или '$ things = $ user-> things-> first();' – CrackingTheCode

ответ

1

Вы можете попробовать это (использование belongsToMany для many-to-many отношений):

// User.php 

protected $primaryKey = 'foo'; 
public $incrementing = false; 

public function things() { 
    return $this->belongsToMany('App\Thing', 'user_things', 'foo', 'thing_id'); 
} 

// Thing.php 
public function users() { 
    return $this->belongsToMany('App\User', 'user_things', 'thing_id', 'foo'); 
} 

Наконец, используйте $user->things вместо $user->things().

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