SQLSTATE [HY000]: общая ошибка: 1364 Поле "идентификатор_альбома" не имеет значения по умолчанию

Я хочу связать несколько изображений с несколькими альбомами. Получила следующую ошибку:

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();
 }
}

Сделать его допускающим значение NULL: $table->integer('album_id')->nullable();

adam 17.12.2018 17:27

Похоже, вы хотите, чтобы между изображениями и альбомами была связь "многие ко многим". Вам понадобится еще одна таблица: laravel.com/docs/5.7/eloquent-relationships#many-to-many

adam 17.12.2018 17:30

Это не решает. Когда я нажимаю на альбом, я хочу получить все изображения из этого альбома.

Aricia 17.12.2018 17:32

@adam, у меня уже есть сводная таблица "album_foto"

Aricia 17.12.2018 17:33

Почему у вас album_id на столе fotos?

Remul 17.12.2018 17:38

Album_id - это внешний ключ из таблицы альбомов. У меня должны быть отношения "один ко многим" и "многие ко многим"

Aricia 17.12.2018 17:41

Да, я это понимаю, но зачем вам это нужно, если у вас уже есть отношение «многие ко многим» между двумя таблицами? Тем не менее, как предложил Адам, просто сделайте это nullable, если вы хотите фотографии без альбома.

Remul 17.12.2018 17:46

@Remul, это чей-то проект. Человек хочет иметь отношения "один ко многим" и "многие ко многим".

Aricia 17.12.2018 17:51

В моей таблице fotos в столбце "album_id" стоит NULL. Я не этого хочу. Мне нужен идентификатор из альбома.

Aricia 17.12.2018 18:01

Если вам не нужен нуль, вам нужно указать ему идентификатор альбома.

adam 17.12.2018 18:05

Что вы имеете в виду? Я не понимаю

Aricia 17.12.2018 18:07

Может кто-то помочь мне, пожалуйста? Я не знаю что делать

Aricia 17.12.2018 21:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
12
590
1

Ответы 1

Используйте определение столбца без знака для привязки внешних ключей к идентификаторам.

Определите также внешние ключи для правильного соединения ваших таблиц.

Попробуйте объявить свою таблицу таким образом:

<?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');
    });
}

Другие вопросы по теме