Я хочу связать несколько изображений с несколькими альбомами. Получила следующую ошибку:
SQLSTATE[HY000]: General error: 1364 Field 'album_id' doesn't have a default value
Я не хочу иметь значение по умолчанию для моего album_id.
Моя таблица фотографий:
public function up()
{
Schema::create('fotos', function (Blueprint $table) {
$table->increments('id');
$table->string('foto');
$table->timestamps();
$table->integer('album_id');
});
}
Таблица моего альбома:
public function up()
{
Schema::create('albums', function (Blueprint $table) {
$table->increments('id');
$table->string('foto');
$table->string('naam');
$table->timestamps();
});
}
Моя сводная таблица:
public function up()
{
Schema::create('album_foto', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->integer('album_id');
$table->integer('foto_id');
});
}
Сеялка стола Мои альбомы:
<?php
use Illuminate\Database\Seeder;
use App\Album;
class AlbumsTableSeeder extends Seeder {
Первый альбом
public function run() {
$album = new Album([
'foto' => 'Vlinder.jpg',
'naam' => 'Black & White'
]);
$album->save();
Второй альбом
$album = new Album([
'foto' => 'Waterval2.jpg',
'naam' => 'Mother Nature'
]);
$album->save();
}
}
Моя настольная сеялка fotos:
<?php
use Illuminate\Database\Seeder;
use App\Foto;
class FotosTableSeeder extends Seeder {
Первый альбом изображений
public function run() {
$foto = new Foto([
'foto' => 'Vlinder.jpg'
],
[
'foto' => 'Berlijn.jpg'
],
[
'foto' => 'Mist.jpg'
],
[
'foto' => 'Mystery_Guy.JPG'
],
[
'foto' => 'Pop.JPG'
],
[
'foto' => 'Pop2.JPG'
],
[
'foto' => 'Pop3.JPG'
],
[
'foto' => 'Spiegel.JPG'
],
[
'foto' => 'Stammen.jpg'
],
[
'foto' => 'Voet.jpg'
],
[
'foto' => 'Vogels.jpg'
]
);
$foto->save();
Изображения второй альбом
$foto = new Foto([
'foto' => 'Maan.jpg'
],
[
'foto' => 'Plant.JPG'
],
[
'foto' => 'Sneeuw.JPG'
],
[
'foto' => 'Stammen.jpg'
],
[
'foto' => 'Steen.JPG'
],
[
'foto' => 'Vlinder.jpg'
],
[
'foto' => 'Vogels.jpg'
]
);
$foto->save();
}
}
Похоже, вы хотите, чтобы между изображениями и альбомами была связь "многие ко многим". Вам понадобится еще одна таблица: laravel.com/docs/5.7/eloquent-relationships#many-to-many
Это не решает. Когда я нажимаю на альбом, я хочу получить все изображения из этого альбома.
@adam, у меня уже есть сводная таблица "album_foto"
Почему у вас album_id
на столе fotos
?
Album_id - это внешний ключ из таблицы альбомов. У меня должны быть отношения "один ко многим" и "многие ко многим"
Да, я это понимаю, но зачем вам это нужно, если у вас уже есть отношение «многие ко многим» между двумя таблицами? Тем не менее, как предложил Адам, просто сделайте это nullable
, если вы хотите фотографии без альбома.
@Remul, это чей-то проект. Человек хочет иметь отношения "один ко многим" и "многие ко многим".
В моей таблице fotos в столбце "album_id" стоит NULL. Я не этого хочу. Мне нужен идентификатор из альбома.
Если вам не нужен нуль, вам нужно указать ему идентификатор альбома.
Что вы имеете в виду? Я не понимаю
Может кто-то помочь мне, пожалуйста? Я не знаю что делать
Используйте определение столбца без знака для привязки внешних ключей к идентификаторам.
Определите также внешние ключи для правильного соединения ваших таблиц.
Попробуйте объявить свою таблицу таким образом:
<?php
// Fotos table
public function up() {
Schema::create('fotos', function (Blueprint $table) {
$table->increments('id');
$table->string('foto');
$table->integer('album_id')->nullable()->unsigned();
$table->timestamps();
$table->foreign('album_id')->references('id')->on('albums');
});
}
// Album table
public function up() {
Schema::create('albums', function (Blueprint $table) {
$table->increments('id');
$table->string('foto');
$table->string('naam');
$table->timestamps();
});
}
// Pivot table
public function up() {
Schema::create('album_foto', function (Blueprint $table) {
$table->increments('id');
$table->integer('album_id')->unsigned();
$table->integer('foto_id')->unsigned();
$table->timestamps();
$table->foreign('album_id')->references('id')->on('albums');
$table->foreign('foto_id')->references('id')->on('fotos');
});
}
Сделать его допускающим значение NULL:
$table->integer('album_id')->nullable();