Итак, я изо всех сил пытался заставить эту схему работать (кстати, полный новичок в laravel...). У меня есть таблица «фотографии» и таблица «аудиодорожек», и я хочу иметь возможность сделать что-то вроде этого:
Модель трека:
// Get the photo associated with this track.
public function cover_art() {
return $this->hasOne('App\Photo');
}
Фото модели:
// Get all the tracks associated with this photo.
public function tracks() {
return $this->belongsToMany('App\Track');
}
Как лучше всего представить эту взаимосвязь (аудиодорожка может иметь только одну фотографию, а фотография может принадлежать нескольким дорожкам)?
Ну наконец-то я все настроил и получаю ожидаемые ошибки:
Фото таблицы:
Schema::create('photos', function (Blueprint $table) {
$table->increments('id');
$table->string('path');
$table->string('filename');
$table->string('original_filename');
$table->boolean('is_cover')->default(false);
$table->string('title');
$table->string('slug')->unique();
$table->string('caption')->nullable();
$table->timestamps();
});
Таблица дорожек:
Schema::create('tracks', function (Blueprint $table) {
$table->increments('id');
$table->integer('photo_id')->unsigned()->nullable();
$table->string('path');
$table->string('filename');
$table->string('original_filename');
$table->string('title');
$table->string('slug')->unique();
$table->string('caption')->nullable();
$table->timestamps();
$table->foreign('photo_id')->references('id')->on('photos')->onDelete('set null');
});
Итак, теперь, когда, например, я вызываю соответствующие методы в своих представлениях или в своих контроллерах, я получаю следующие ошибки:
@foreach($tracks as $track)
{{ $track->cover_art }}
@endforeach
SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец «photos.track_id» в «предложении where» (SQL: выберите * из photos
, где photos
.track_id
= 1, а photos
.track_id
не является нулевым пределом 1)
@foreach($photos as $photo)
{{ $photo->tracks }}
@endforeach
SQLSTATE[42S02]: базовая таблица или представление не найдено: 1146 Таблица iagomarta.photo_track не существует (SQL: выберите tracks
.*, photo_track
.photo_id
как pivot_photo_id
, photo_track
.track_id
как pivot_track_id
из tracks
внутреннего соединения photo_track
по tracks
. id
= photo_track
.track_id
где photo_track
.photo_id
= 1)
Какие-либо предложения?
tracks
должно быть полеphoto_id
, потому что на трек приходится 1 фотография. Вам не нужно ничего добавлять в таблицуphotos
, потому чтоbelongsToMany
будет искатьphoto_id
наtracks
. - person samlev   schedule 18.09.2015