Я ссылался на другие вопросы, такие как мой, но я не могу понять, почему я получаю ошибку в моем примере.
У меня есть 3 таблицы. nn_album, nn_song и сводная таблица nn_song_album_song
Имена моих таблиц имеют имена nn_album.album_id, nn_song.song_id, сводная таблица имеет идентификатор в качестве первичного ключа и одинаковые имена столбцов "song_id" и "album_id"
100 * Я могу добавить альбом, но когда я хочу добавить новую песню в альбом, я получаю эту ошибку при функции сохранения ...
SQLSTATE [23000]: Нарушение ограничения целостности: 1052 Столбец 'album_id' в списке полей неоднозначен (SQL: выберите album_id
из nn_album
внутреннее объединение nn_song_album_song
в nn_album
. album_id
= nn_song_album_song
. album_id
, где nn_song_album_song
. song_id
= 21)
Модель моей песни
public function albums()
{
return $this->belongsToMany('App\Albums', 'nn_song_album_song', 'song_id', 'album_id');
}
Модель моего альбома
public function songs()
{
return $this->belongsToMany('App\SongDetail', 'nn_song_album_song', 'song_id', 'album_id');
}
Мой контроллер Функция сохранения
$albums = request('albums');
if ($song_id>0)
{
$entry = SongDetail::where('song_id', $song_id)->firstOrfail();
$entry->update($data);
$entry->albums()->sync($albums);
}
else
{
$entry = SongDetail::create($data);
$entry->albums()->attach($albums);
}
Мой вид на стороне администратора для выбора входного альбома (я могу выбрать несколько альбомов для добавления)
<div class="form-group form-float mainalbum" style="margin-bottom: 45px;border-bottom: solid 1px;">
<div class="form-line">
<select class="form-control show-tick" name="albums[]" id="albums" data-live-search="true" >
@foreach($albums as $album)
@if($album->album_id != 1)<option value="{{ $album->album_id }}" {{ collect(old('albums', $album))->contains($album->album_id) ? 'selected': '' }}>
{{ $album->album_name }}</option>@endif
@endforeach
</select>
<select class="albums2" name="albums2[]" id="albums2" multiple>
@foreach($albums as $album)
@if($album->album_id != 1)<option value="{{ $album->album_id }}" {{ collect(old('albums', $album))->contains($album->album_id) ? 'selected': '' }}>
{{ $album->album_name }}</option>@endif
@endforeach
</select>
</div>
</div>
У вас есть идеи, что здесь происходит? В чем моя вина? Если вы поделитесь со мной своими мыслями, я ценю вас.
Спасибо.