Есть ли способ, которым я могу получить текущую таблицу базы данных, используемую моделью, в которой я работаю? Я вижу, что есть функция table() в Laravel/Database/Eloquent/model.php, но я не увенчался успехом, вызвав ее, вызвав ее из модели, в которой я находится.
Как вернуть имя таблицы базы данных в Laravel
Ответ 1
Изменить апрель 2019 года: этот ответ устарел. Смотрите новый правильный ответ Флин Сан
Да - Eloquent имеет переменную $table
. Есть два способа получить к нему доступ:
class yourModel extends Eloquent {
public static $table = "differentTable";
function someFunction()
{
return yourModel::$table;
}
}
или же
class yourModel extends Eloquent {
public function someFunction()
{
return $this->table();
}
}
тогда в вашем коде
Route::get('/', function () {
$model = new yourModel();
dd($model->someFunction());
});
Ответ 2
Тейлор имеет ответ на ваш вопрос:
В классе модели вы можете сделать что-то вроде этого:
return with(new static)->getTable();
Если вы хотите, чтобы все ваши модели имели возможность возвращать имя таблицы статически, то вот что-то вроде этого:
class BaseModel extends Eloquent {
public static function getTableName()
{
return with(new static)->getTable();
}
}
class User extends BaseModel {
}
User::getTableName();
Ответ 3
Существует общедоступный метод getTable(), определенный в Eloquent\Model, чтобы вы могли использовать $model->getTable()
.
Ответ 4
В моем случае я использую laravel 5.4
return (new static)->getTable();
Ответ 5
Так как table
является защищенным свойством в классе модели (Laravel >= 5), вам понадобится экземпляр вашей модели.
Вот пример:
DB::table( (new YourModelClassname)->getTable() )
->update(['field' => false]);
Ответ 6
Я просто хотел добавить следующее для людей из поисковых систем:
Если вы даже не хотите создавать экземпляр Model (быстрее?):
$model = 'App\User';
$modelTable = str_replace('\\', '', Str::snake(Str::plural(class_basename($model))));
dd($modelTable); // will return "users"
Это может показаться уродливым, но именно так метод getTable() разрешает это скрытно, так что...
Вам понадобится use Illuminate\Support\Str;
поверх вашего файла.
Приложение: подразумевается, что вы следуете рамочным стандартам (то есть: модель Post
имеет таблицу posts
, модель пользователя имеет таблицу users
и т.д.)
Ответ 7
В Laravel 4 используйте статический метод
$table_name = Model::getTable();
или " self" внутри Eloquent Model
$table_name = self::getTable();