public function unrelateAll(Table ...$tables): self
    {
        $table1 = $this->table;

        foreach ($tables as $table2) {
            //Has one
            if ($field = $table1->getJoinField($table2)) {
                $this->{$field->getName()} = null;
                continue;
            }

            //Has many
            if ($field = $table2->getJoinField($table1)) {
                $table2->update([
                    $field->getName() => null,
                ])
                ->relatedWith($table1)
                ->run();
                continue;
            }

            //Has many to many
            if ($joinTable = $table1->getJoinTable($table2)) {
                $joinTable->delete()
                    ->where("{$joinTable->getJoinField($table1)} = ", $this->id)
                    ->where("{$joinTable->getJoinField($table2)} IS NOT NULL")
                    ->run();

                continue;
            }

            throw new RuntimeException(
                sprintf('The tables %s and %s are not related', $table1, $table2)
            );
        }

        return $this->save();
    }
public function unrelateAll(Table ...$tables): self
    {
        $table1 = $this->table;

        foreach ($tables as $table2) {
            //Has one
            if ($field = $table1->getJoinField($table2)) {
                $this->{$field->getName()} = null;
                continue;
            }

            //Has many
            if ($field = $table2->getJoinField($table1)) {
                $table2->update([
                    $field->getName() => null,
                ])
                ->relatedWith($table1)
                ->run();
                continue;
            }

            //Has many to many
            if ($joinTable = $table1->getJoinTable($table2)) {
                $joinTable->delete()
                    ->where("{$joinTable->getJoinField($table1)} = ", $this->id)
                    ->where("{$joinTable->getJoinField($table2)} IS NOT NULL")
                    ->run();

                continue;
            }

            throw new RuntimeException(
                sprintf('The tables %s and %s are not related', $table1, $table2)
            );
        }

        return $this->save();
    }
public function unrelateAll ( Table ... $ tables ) : self { $ table1 = $ this -> table ; foreach ( $ tables as $ table2 ) { //Has one if ( $ field = $ table1 -> getJoinField ( $ table2 ) ) { $ this -> { $ field -> getName ( ) } = null ; continue ; } //Has many if ( $ field = $ table2 -> getJoinField ( $ table1 ) ) { $ table2 -> update ( [ $ field -> getName ( ) => null , ] ) -> relatedWith ( $ table1 ) -> run ( ) ; continue ; } //Has many to many if ( $ joinTable = $ table1 -> getJoinTable ( $ table2 ) ) { $ joinTable -> delete ( ) -> where ( "{$joinTable->getJoinField($table1)} = " , $ this -> id ) -> where ( "{$joinTable->getJoinField($table2)} IS NOT NULL" ) -> run ( ) ; continue ; } throw new RuntimeException ( sprintf ( 'The tables %s and %s are not related' , $ table1 , $ table2 ) ) ; } return $ this -> save ( ) ; }
Unrelate this row with all rows of other tables
Unrelate this row with all rows of other tables