Случайно удаленные отношения laravel - PullRequest
0 голосов
/ 23 января 2019

поэтому у меня есть связь между двумя моделями

class Projects extends Model implements Auditable
{
    use SoftDeletes;
    use \OwenIt\Auditing\Auditable;

    protected $fillable = [
        'name', 'active'
    ];

    public function boards(){
        return $this->belongsTo(Board::class);
    }
}

И

class Board extends Model
{
    protected $guarded = [];

    public function projects(){
        return $this->hasMany(Projects::class);
    }

}

Я хотел освободить Правление от его Проектов, не удаляя связь. Я думал, что этот код поможет:

$board->projects()->delete()

Но я закончил тем, что удалил отношения.

Теперь у меня вопрос: как мне восстановить отношения и как лучше всего очистить отношения, не удаляя их?

РЕДАКТИРОВАТЬ: для дальнейшего объяснения Допустим, у меня есть 4 проекта, принадлежащих Правлению. Как бы я избавился от всех сразу, не зная идентификаторов проекта?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Невозможно восстановить удаленные данные из базы данных, если у вас нет резервных копий или вы не используете функцию Laravel Soft Delete .

Если вы уже используете это, вы можете восстановить данные из БД или ->withTrashed() способ.

Обычно Laravel удаляет все данные о взаимоотношениях через $board->projects()->delete(), но я не понимаю вашей проблемы. Когда вы запускаете команду $board->projects()->delete(), что случилось? Обычно при его использовании следует удалить все projects из таблицы проектов.

Примечание; Для следующего удаления, вы можете использовать DB :: транзакция для надежного удаления данных отношений.

EDIT;

При удалении доски вы хотите удалить данные проектов отношений, вы можете использовать следующий метод.

DB::transaction(function () use ($board) {
    $board->projects()->delete();
    $board->delete();
});

Приведенные выше коды, если проекты были удалены правильно, удаляет данную доску. Если при удалении возникает проблема, она ничего не удаляет благодаря DB::transaction.

0 голосов
/ 23 января 2019

Я думаю, что вы могли бы восстановить отношения, потому что вы используете мягкое удаление в модели Projects.Вы можете сделать это, выполнив:

$board->projects()->withTrashed()->restore();

Обратите внимание на использование метода withTrashed() в запросе.Он вернет мягко удаленные проекты.

Вы можете "очистить" отношения, сделав board_id nullable в таблице projects и установив board_id в null.

Вы можете массово обновить проекты, запустив:

$board->projects()->update(['board_id' => null]);

РЕДАКТИРОВАТЬ: Массовое обновление также можно выполнить, запустив $board->projects()->detach();, как указано в @ здравом смысле.

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