У меня есть 2 таблицы с довольно сложными отношениями. Таблица users
имеет два внешних ключа к таблице images
, а таблица images
имеет один внешний ключ для таблицы users
, который не имеет отношения к другим двум внешним ключам.Невозможно получить работу Модели Laravel со многими отношениями
Я не могу правильно подобрать модели. Мне нужно, чтобы все ссылочные поля были связаны с моделями, а также так, что в User
есть свойство images
, которое возвращает все изображения, принадлежащие этому пользователю.
Вот мой стол код генерирующий:
Schema::create('users', function ($table) {
$table->increments('id')->unsigned();
$table->integer('portrait')->unsigned()->nullable();
$table->integer('backimg')->unsigned()->nullable();
$table->timestamps();
});
Schema::create('images', function ($table) {
$table->increments('id')->unsigned();
$table->integer('owner')->unsigned();
$table->foreign('owner')->references('id')->on('users');
$table->timestamps();
});
Schema::table('users', function($table) {
$table->foreign('portrait')->references('id')->on('images');
$table->foreign('backimg')->references('id')->on('images');
});
И вот моя попытка с моделями:
class User extends Eloquent implements UserInterface, RemindableInterface {
public function backimg(){
return $this->hasOne('Image', 'backimg');
}
public function portrait(){
return $this->hasOne('Image', 'portrait');
}
public function images(){
return $this->belongsTo('Image', 'owner');
}
}
class Image extends Eloquent {
public function owner(){
return $this->hasOne('User', 'owner');
}
}
Я думал, что приведенный выше код должен работать, однако все свойства возвращают строки не объекты.
Сторона примечания: '-> nullable() -> default (null)' избыточно, вам не нужно использовать по умолчанию. –
@TimLewis Я знаю, я написал его так, чтобы потом было легко перейти на что-то другое. – Somnium