К сожалению, Laravel не предлагает решение для этого. Вам придется сделать это самостоятельно. Я сделал некоторые раскопки и нашли this answer
Вы можете использовать эту функцию и превратить его в метод в классе модели ...
class Page extends Eloquent {
public static function getPossibleStatuses(){
$type = DB::select(DB::raw('SHOW COLUMNS FROM pages WHERE Field = "type"'))[0]->Type;
preg_match('/^enum\((.*)\)$/', $type, $matches);
$values = array();
foreach(explode(',', $matches[1]) as $value){
$values[] = trim($value, "'");
}
return $values;
}
}
И вы используете его как этот
$options = Page::getPossibleStatuses();
If вы хотите, чтобы вы также могли сделать его более универсальным и универсальным.
Сначала создайте BaseModel
. Все модели должны затем простираться от этого класса
class BaseModel extends Eloquent {}
После этого, поместите эту функцию там
public static function getPossibleEnumValues($name){
$instance = new static; // create an instance of the model to be able to get the table name
$type = DB::select(DB::raw('SHOW COLUMNS FROM '.$instance->getTable().' WHERE Field = "'.$name.'"'))[0]->Type;
preg_match('/^enum\((.*)\)$/', $type, $matches);
$enum = array();
foreach(explode(',', $matches[1]) as $value){
$v = trim($value, "'");
$enum[] = $v;
}
return $enum;
}
Вы называете это один, как тот
$options = Page::getPossibleEnumValues('status');
Почему бы не использовать выделенный признак для этого? – ozanmuyes
Уверенный, что вы можете использовать признак, если хотите – lukasgeiter
Laravel должен добавить это в каждый класс Eloquent, возможно, в качестве признака –