2014-10-26 2 views
1

Я начинаю с Laravel и PHP, и я использую методы Query Builder в Laravel для запроса существующей базы данных mySQL.Laravel/PHP JSON формат из существующего mySQL databse

public function showApi($id) 
    { 
    $data = DB::table('Customers')->where('ID', $id)->get(); //Gets specific records 

    return $data; 
    } 

Это создает массив объектов и следующий JSON превью:

Я действительно искал (и на самом деле использовать для потребления) следующий формат:

Любая помощь будет принята с благодарностью.

+0

Так 'FirstName' это столбец имя в вашем db, и вы хотите преобразовать его в 'first_name'? – lukasgeiter

+0

Нет жаль, что два отдельных БД - это мои, и я выплюнул как массив объектов, второй - открытый API в Интернете, у которого есть желаемый формат JSON, который я хочу. – Rich

+0

Но как называются столбцы в вашей базе данных? 'FirstName',' LastName' и т. Д.? – lukasgeiter

ответ

0

Лучший способ изменить свойства ваших моделей, когда они преобразуются в массивы (или объекты 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; 
    } 
} 

Если у вас есть больше этих «особых случаев» вы можете использовать тот же метод, чтобы обращаться с ними по отдельности тоже ...

+0

Но в этом случае вам нужно быть осторожным, потому что он не будет полностью работать. Например, «ID» будет преобразован в 'i_d', а не' id', поэтому вам нужно исключить ключ 'ID' и изменить его на нижний регистр. –

+0

@ MarcinNabiałek Хорошая мысль, я обновлю свой ответ – lukasgeiter

Смежные вопросы