У меня есть модель "Поездка", в которой есть столбец "время", который представляет столбцы времени поездки (в дополнение к созданным и обновленным). Существует связь 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);
}