Laravel имеет много отношений отделить все - PullRequest
2 голосов
/ 15 мая 2019

Есть ли простое решение отсоединить (без удаления) все связанные модели с помощью hasMany Relation для модели?

Например, у меня есть две таблицы:

  • College (id, name)

  • Student (id, name, College_id (nullable)) *

В модели College я определяю эту связь:

class College extends Model
{
    public function students()
    {
        return $this->hasMany('App\Student','college_id','id');
    }
}

Каков наилучший способ отстранить всех нынешних студентов колледжа от колледжа (т. Е. Получить всех студентов колледжа и установить для их College_id значение null)?

Есть ли простой способ отсоединить всех учащихся от модели колледжа с помощью eloquent?

Что-то вроде

class College extends Model
{
    ...
    public function detachAllStudents()
    {
        ...
    }
}

PS уже прочитал этот вопрос Laravel hasMany detach , нополучить ошибки при попытке применить его к моему приложению

Ответы [ 2 ]

4 голосов
/ 15 мая 2019

Да, вы можете отсоединить всех студентов колледжа, как показано ниже. На самом деле, у нас уже есть college_id в вашей таблице students, и мы должны каким-то образом сделать это college_id нулевым. Это не называется detach в Eloquent. Слово detach приходит, когда у вас many to many отношения. Итак, давайте просто обновим студентов и посмотрим, работает ли это или нет.

$college->students()->update(['college_id' => null);

Итак, ваш метод может быть завершен, как показано ниже:

public function detachAllStudents()
{
    $college->students()->update(['college_id' => null]);
}

Вот и все!

2 голосов
/ 15 мая 2019

Напрямую из документации https://laravel.com/docs/5.8/eloquent-relationships:

Объединение ассоциаций

Отношение «многие ко многим» также предоставляет метод переключения, который «переключает» статус вложения данных идентификаторов. Если данный идентификатор в настоящее время прикреплен, он будет отсоединен. Аналогично, если он в данный момент отсоединен, он будет прикреплен:

$user->roles()->toggle([1, 2, 3]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...