Pytanie Jak zwrócić nazwę tabeli bazy danych w Laravel


Czy istnieje sposób, aby uzyskać bieżącą tabelę bazy danych w użyciu przez model, w którym jestem? Widzę, że istnieje funkcja table () w Laravel / Database / Eloquent / model.php, ale nie udało mi się wywołać jej wywołując ją z modelu, w którym się znajduję.


9
2017-12-29 14:39


pochodzenie




Odpowiedzi:


Tak - Eloquent ma $table zmienna. Istnieją dwa sposoby uzyskania dostępu do tego:

class yourModel extends Eloquent {

        public static $table = "differentTable";

        function someFunction()
        {
             dd(yourModel::$table);
        }
}

lub

class yourModel extends Eloquent {

    public function someFunction()
    {
        dd($this->table());

    }
}

następnie w swoim kodzie

Route::get('/', function () {
    $model = new yourModel();   
    dd($model->someFunction());
});


5
2017-12-29 14:45



Dzięki za pomoc. Próbowałem tego zarówno przy ręcznym ustawianiu nazwy tabeli, jak i bez niej. Wciąż otrzymuję "Używanie $ this, gdy nie w kontekście obiektu". Jakieś pomysły? Dzięki! - Chris G
Chris G: możesz skopiować / wkleić swój kod tutaj, ponieważ błąd, który otrzymujesz, wygląda tak, jakbyś wywoływał $ this wewnątrz statycznej metody - Miro


Taylor ma odpowiedź na twoje pytanie:

W klasie modelu możesz zrobić coś takiego:

return with(new static)->getTable();

Jeśli chcesz, aby wszystkie modele miały możliwość statycznego zwracania nazwy tabeli, to coś takiego:

class BaseModel extends Eloquent {

    public static function getTableName()
    {
        return with(new static)->getTable();
    }

}

class User extends BaseModel {

}


User::getTableName();

32
2018-06-29 16:23



W przypadku Laravel 5.3 musisz umieścić to w Illuminate \ Database \ Eloquent \ Model Works, dzięki! - Santee


Istnieje publiczna metoda getTable () zdefiniowana w Eloquent \ Model więc powinieneś być w stanie użyć $model->getTable().


15
2017-12-28 07:55





Od table jest chronioną właściwością w klasie Model (Laravel> = 5), potrzebujesz instancji swojego Modelu.

Oto przykład przypadku:

        DB::table( (new YourModelClassname)->getTable() )
            ->update(['field' => false]);

2
2017-08-11 15:16





W moim przypadku używam laravel 5.4

return (new static) -> getTable ();


2
2018-01-10 10:07





W Laravel 4 posługiwać się statyczny metoda

$table_name = Model::getTable();

lub "samego siebie"w Modelu Wymownym

$table_name = self::getTable();

-3
2018-03-09 18:40



Wydaje się, że funkcja getTable () nie jest statyczna - do pobrania tabeli potrzebna jest instancja modelu: $model = new Model(); $table_name = $model->getTable(); (Używam Laravel 4.1.30). - nexus-bytes
na dzień 16/01/2017 faktycznie udało mi się uzyskać nazwę tabeli wewnątrz modelu self::getTable(). Laravel 5.5. - curveball