Ошибка вставки "многие ко многим". Вызов функции-члена Laravel 5.5

У меня беда во многих ко многим прошивкам. Мой код в контроллере правильный. После того, как я добавляю два данных, которые успешно завершаются, третий раз, когда я пытаюсь вставить, выдает ошибку:

Call to a member function bagcollects() on null

и ошибка в этом коде

$collection->bagcollects()->attach($bagcollect->id);

Я просто не понимаю, почему возникла эта ошибка!

Я покажу весь код метода хранилища CollectionsController:

public function addbag(Request $request){
    $collection = Collection::find($request->input('collection_id'));
    $bagcollect = Bagcollect::create([
        'bag_id' => $request->input('bag_id'),
        'weight' => $request->input('weight')
    ]);
    $collection->bagcollects()->attach($bagcollect->id);
    return redirect()->route('collections.show', ['collection'=> $collection->id]);
}

Миграция по коллекциям

Schema::disableForeignKeyConstraints();
if (!Schema::hasTable('collections')){
    Schema::create('collections', function (Blueprint $table) {
        $table->engine = "InnoDB";
        $table->increments('id');
        $table->integer('assignment_id')->unsigned();
        $table->foreign('assignment_id')->references('id')->on('assignments')->onUpdate('cascade')->onDelete('cascade');
        $table->timestamp('collected_on');
    });
}

Миграция на bagcollects

Schema::create('bagcollects', function (Blueprint $table) {
    $table->engine = "InnoDB";
    $table->increments('id');
    $table->integer('bag_id')->unsigned();
    $table->double('weight', 8, 2);
    $table->foreign('bag_id')->references('id')->on('bags');
    $table->timestamps();
});

Миграционный пакетcollect_collection

Schema::create('bagcollect_collection', function (Blueprint $table) {
    $table->engine = "InnoDB";
    $table->increments('id');
    $table->integer('bagcollect_id')->unsigned();
    $table->integer('collection_id')->unsigned();
    $table->foreign('bagcollect_id')->references('id')->on('bagcollects');
    $table->foreign('collection_id')->references('id')->on('collections');
    $table->timestamps();
});

коллекции show.blade.php добавить модальный

<!-- ADD MODAL -->
<div class = "modal fade" role = "dialog" id = "addModal">
    <div class = "modal-dialog">
        <div class = "modal-content">
            <div class = "modal-header">
                <button type = "button" class = "close" data-dismiss = "modal">&times;</button>
                <h4 class = "modal-title">New Collection</h4>
            </div>

            <div class = "modal-body">
                <div class = "row">
                    <div class = "col-md-12"> 
                        <form class = "form-horizontal" method = "POST" action = "{{ route('collections.addbag') }}">
                            {{ csrf_field() }}


                            <div class = "row form-group">  

                                <input class = "form-control" name = "collection_id" id = "collection_id" value = "{{$collection->id}}" type = "hidden">
                                 <div class = "{{ $errors->has('bag') ? ' has-error' : '' }}">
                                        <div class = "col-md-8">
                                            <label for = "bag_id">Bag</label>
                                             <select class = "form-control" required id = "bag" name = "bag_id">
                                                 <option value = "" data-hidden = "true"  
                                                    selected = "selected">
                                                </option>
                                                    @foreach($bags as $bag)
                                                        <option value= "{{ $bag->id }}">
                                                              {{ $bag->name }} 
                                                        </option>
                                                    @endforeach
                                              </select>
                                        </div>
                                    </div>

                                  <div class = "{{ $errors->has('weight') ? ' has-error' : '' }}">
                                        <div class = "col-md-8">
                                            <label for = "weight">Weight</label>
                                             <input type = "text" class = "form-control" id = "weight" name= "weight" required>
                                        </div>
                                  </div>

                            </div>   

                            <!-- SUBMIT BUTTON -->
                            <button type = "submit" class = "btn btn-success btn-fill pull-right" id = "form-button-add">
                                Create
                            </button>

                            <button  data-dismiss = "modal" aria-hidden = "true" class = "btn btn-basic pull-right" style = "margin-right: 2%">
                                Cancel
                            </button>             
                            <div class = "clearfix"></div>

                        </form>                
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

Модель collection.php

protected $fillable = [
    'id',
    'assignment_id',
    'bag_id'
];

public $timestamps = false;

public function assignment()
{
    return $this->belongsTo('App\Assignment');
}

public function bagcollects()
{
    return $this->belongsToMany('App\Bagcollect');
}

Bagcollect.php

protected $fillable = [
    'bag_id',
    'weight'
];

public function collections()
{
    return $this->belongsToMany('App\Collection');
}

public function bag()
{
    return $this->belongsTo('App\Bag');
}

BagcollectCollection.php

protected $table = "bagcollect_collection";

protected $fillable = [
    'bagcollect_id',
    'collection_id',

];

вы можете поделиться моделью отношений?

Teoman Tıngır 06.09.2018 16:20
Collection уже является классом в Laravel; у вас могут возникнуть проблемы с вашей моделью Collection по сравнению с помощником Collection (laravel.com/docs/5.6/collections). Рассмотрите возможность изменения названия вашей таблицы / модели.
Tim Lewis 06.09.2018 16:21

@TimLewis, которую она, вероятно, использует со своим собственным пространством имен, не должно быть проблемой ..

Teoman Tıngır 06.09.2018 16:22

@ HasanTıngır Да, наверное, но, не видя заявления use, трудно сказать. Изменил мою формулировку комментария, теперь он больше похож на предупреждение.

Tim Lewis 06.09.2018 16:24

вы можете сбросить переменную $collection с помощью метода dd ()?

Teoman Tıngır 06.09.2018 16:29

Я делаю dd ($ collection). В моем 1-м добавлении идентификатор коллекции все еще существует, но во 2-м добавлении он показывает нулевой идентификатор коллекции, который я передаю. Я добавлю его вид

Maria Theresa Chavez 06.09.2018 17:19

@MariaTheresaChavez Можете поделиться своей моделью?

Christian Gallarmin 06.09.2018 17:30

Хорошо, я выложу свою модель через некоторое время

Maria Theresa Chavez 06.09.2018 17:31

@ChristianGallarmin Модель я уже выкладываю. Проверить это

Maria Theresa Chavez 07.09.2018 04:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
484
1

Ответы 1

Call to a member function ... on null

Означает, что вы пытаетесь вызвать функцию объекта null. Просмотрите свой код:

$collection = Collection::find($request->input('collection_id'));

С вашей текущей логикой $collection может быть null, поэтому вызов

$collection->bagcollects() ...

Выдает эту ошибку.

Выполните отладку результата Collection::find(...) и убедитесь, что $collection не является null.

Я пытаюсь использовать dd в своем коде контроллера. Когда я ввожу данные, collection_id передается из show.blade.php, но при второй попытке collection_id стал нулевым. Я не знаю, потому что думаю, что его следует передать, зная, что он находится в шоу, и collection_id существует в этом представлении

Maria Theresa Chavez 08.09.2018 08:09

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