В настоящее время мы переходим из одной базы данных в другую. Таблица в нашей базе унаследованных имеет имена столбцов, которые меньше, чем идеал, например:Eloquent Friendly Column Name
some_crazy_name__xyz
В нашей новой базе данных, мы хотели бы иметь имя столбца, как:
someCrazyName
В краткосрочной перспективе мы должны работать с данными нашей старой базы данных. В какой-то момент в ближайшем будущем мы хотели бы переключиться без необходимости реорганизации всего кода Eloquent для запроса разных имен столбцов. Например:
$model = MyModel::where('someCrazyName', '=', 1);
В настоящее время я расширив класс модели, где все исполнители модели обеспечивают карту страшных имен дружественных имен:
class MyModel extends BaseModel {
$columnMap = array(
'someCrazyName' => 'some_crazy_name__xyz'
);
}
Это хорошо работает, где я могу использовать __get
и __set
в BaseModel
для поиска свойства в моей карте, например:
$myModel = new MyModel;
// ...
echo $myModel->someCrazyName;
Однако, это, очевидно, не очень хорошо работает с Queri без необходимости всегда использовать мою карту для поиска имен столбцов. Мне интересно, не возможно ли переопределить все методы в пределах Illuminate\Database\Eloquent\Model
, Illuminate\Database\Query\Builder
и Illuminate\Database\Eloquent\Builder
, которые имеют дело с столбцами, в которых построенный основной запрос всегда сопоставляется с правильным столбцом? Затем, после перехода баз данных, мы можем удалить эту часть кода, а затем удалить потенциально тысячи сопоставлений имен столбцов.
Я начал спускаться по [глобальным областям] (http://laravel.com/docs/5.0/eloquent#global-scopes), но это выглядит чище, спасибо! Возможно, запрос функции, возвращающий данные в дружественное имя, которое было запрошено, а не уродливое имя? – Jon
@ Jon, пожалуйста, уточните? Полагаю, это то, о чем вы говорите в https://laracasts.com/discuss/channels/eloquent/column-alias-definitions –
, что, кажется, то, что я ищу. В настоящий момент я не могу сохранить модель Eloquent, которая использует свойство Mappable. Просто добавление Mappable вызывает бесконечный цикл, в котором многократно повторяются методы Eloquent и Eloquence save(). – Jon