Получить имена атрибутов модели, у которой нет записей - PullRequest
0 голосов
/ 30 апреля 2018

Есть ли способ получить все имена атрибутов для модели, у которой еще нет записей?

Например, компания 'App\Company' имеет название, адрес и адрес электронной почты. Тем не менее, в настоящее время нет записей компании, хранящихся в базе данных. Не обращаясь к каким-либо существующим записям в базе данных, я хочу вернуть массив

[
    0 => 'name',
    1 => 'address',
    2 => 'email_address'
]

Я пробовал следующее:

$class = 'App\Company';
return array_keys((new $class)->getAttributes());

Но это возвращает пустой массив, так как все поля пусты.

Можно ли как-нибудь получить их, не выполняя поиск в базе данных по существующей записи?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы можете использовать фасад БД для получения метаданных таблицы

use Illuminate\Support\Facades\DB
...
DB::getSchemaBuilder()->getColumnListing('tableName'); //table name not model name

Вы можете проверить это в повозке так:

$ php artisan tinker
Illuminate\Support\Facades\DB::getSchemaBuilder()->getColumnListing('Users');

Выход:

[
 "id",
 "name",
 "email",
 "password",
 "remember_token",
 "created_at",
 "updated_at",
]
0 голосов
/ 30 апреля 2018

Вы можете получить атрибуты из базы данных напрямую. Если предположить, что в модели вашей компании есть соответствующая таблица с названием companys или что-то подобное, то

$attributeArray = Schema::getColumnListing('companys'); 
dd($attributeArray);

Даст вам требуемый результат. Единственная проблема в том, что он не показывает никаких пользовательских атрибутов вашей модели.

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