Изменение значения столбца времени, не касаясь его - PullRequest
0 голосов
/ 25 марта 2020

У меня есть модель "Поездка", в которой есть столбец "время", который представляет столбцы времени поездки (в дополнение к созданным и обновленным). Существует связь hasOne между моделью «Поездка» и моделью «Автобус» (каждая шина может быть связана с более чем 1 поездкой). Я хочу установить для столбца "bus_id" в таблице "Trips" значение null при удалении соответствующей шины. Когда я это делаю, происходит что-то очень странное, столбец «время» в таблице «Поездки» меняется на текущее время (аналогично updated_at) .

Примечание:

  • Это происходит только в этом случае ; любое обновление таблицы «Поездка» не меняет столбец.
  • Когда я проверяю код с помощью dd(), я нахожу столбец "время" без изменений , но затем в базе данных изменяется значение .

Модель поездки:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Trip extends Model
{
    //
    protected $fillable = ['time', 'bus_id'];

    public function getStationsStringified(){
        $stations = $this->stations()->orderBy('order', 'asc')->pluck('name')->toArray();
        return implode(",", $stations);
    }

    public function bus(){
        return $this->belongsTo(Bus::class);
    }

    public function tickets(){
        return $this->hasMany(Ticket::class);
    }

    public function stations(){
        return $this->belongsToMany(Station::class)->withPivot("order");
    }
}

Модель шины:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Bus extends Model
{
    //
    protected $fillable = ['license_num'];

    public function trips(){
        return $this->hasMany(Trip::class);
    }
}

Функция уничтожения в BusController:

public function destroy($id){
        $bus = Bus::find($id);

        foreach ($bus->trips as $trip){
            if($trip->time < Carbon::now()->startOfDay()){
                $trip->bus()->dissociate();
                $trip->save();
            }else{
                return new Response("There a trip ".$trip->getStationsStringified()." associated with this bus, please change its bus before deletion", Response::HTTP_CONFLICT);
            }
        }

        $bus->delete();

        return new Response("Deleted", Response::HTTP_OK);
    }

1 Ответ

0 голосов
/ 26 марта 2020

Проблема заключалась в том, что я использовал timestamp() в файле миграцииn, определяющем таблицу поездок , которая автоматически добавляет дополнительную функцию в столбец времени , установленный на текущее время обновление .

Причина, по которой проблема не возникает ни при каких других обновлениях, заключается в том, что я установил значение для столбца времени .

Решение заключается в использовании datetime() при миграции вместо timestamp().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...