Лучший способ изменить свойства ваших моделей, когда они преобразуются в массивы (или объекты json), - это переопределить метод toArray()
в вашей модели. Поэтому, если вы этого еще не сделали, вам нужно будет начать работу с Eloquent models.
Ваша модель - Customer.php
class Customer extends Eloquent {
protected $table = 'Customer' // you'll need that because you're table differs from the convention ('customer')
public function toArray(){
$attributes = parent::toArray();
$array = array();
foreach($attributes as $key => $value){
$newKey = snake_case($key);
$array[$newKey] = $value;
}
return $array;
}
}
Что мы делаем здесь, просто получить массив атрибутов из вашего родителя, а затем цикл через него и изменить ключ от StudlyCase к snake_case
Если вам нужна эта функциональность во всех ваших моделях, было бы лучше создать BaseModel
, у которого есть этот метод, а затем позволить всем остальным перейти от него.
В конце концов, ваш метод контроллера будет выглядеть следующим образом:
public function showApi($id)
{
$customers = Customer::where('ID', $id)->get(); //Gets specific records
return Response::json($customers);
}
Редактировать
Как Marcin Nabiałek отметил в комментариях, ваша колонка ID
является своего рода особенным. Laravel превратит его в i_d
. Таким образом, чтобы избежать этого, мы должны исключить его
foreach($attributes as $key => $value){
if($key == 'ID'){
$array['id'] = $value;
}
else {
$newKey = snake_case($key);
$array[$newKey] = $value;
}
}
Если у вас есть больше этих «особых случаев» вы можете использовать тот же метод, чтобы обращаться с ними по отдельности тоже ...
Так 'FirstName' это столбец имя в вашем db, и вы хотите преобразовать его в 'first_name'? – lukasgeiter
Нет жаль, что два отдельных БД - это мои, и я выплюнул как массив объектов, второй - открытый API в Интернете, у которого есть желаемый формат JSON, который я хочу. – Rich
Но как называются столбцы в вашей базе данных? 'FirstName',' LastName' и т. Д.? – lukasgeiter