2013-05-16 3 views
4

Я пытаюсь получить свой маршрут, чтобы вставить новую строку в базу данных, и в случае успешного возвращения записи (с ее новым идентификатором первичного ключа) в некоторый JSON. Я получаю следующее сообщение об ошибке:Преобразование Laravel-4 Яркие результаты запроса в массивы

{ 
    "error": 
    { 
     "type":"BadMethodCallException", 
     "message":"Call to undefined method Illuminate\\Database\\Query\\Builder::to_array()", 
     "file":"\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Query\\Builder.php", 
     "line":1418 
    } 

} 

Это мой маршрут:

Route::post('/client/create', function() 
{ 
    $client = Client::create(Input::all()); 
    if($client) 
    { 
     return json_encode(array('Result' => 'OK', 'Record' => $client->to_array())); 
    } 
    else 
    { 
     return json_encode(array('Result' => 'ERROR', 'Message' => 'Error Inserting Record =(')); 
    } 
}); 

Согласно документации Laravel я прочитал, что вы должны использовать ->to_array() для преобразования модели в array и ::create возвращает экземпляр модели, если она успешно вставлена. Я проверил базу данных, и записи вставляются просто отлично.

+3

попробуйте '' 'вернуть $ client-> toArray();' '' и вы также можете использовать '' 'return $ client-> toJson();' '', если это то, что вам нужно. –

+0

@AntonioCarlosRibeiro Спасибо, что работает! Он не проходит в id вставленной строки, но я всегда могу получить это в другом месте. –

ответ

9

По умолчанию, если вы хотите вернуть модель Eloquent напрямую, она преобразует модель в ее представление JSON. Это связано с тем, что магический метод для каждой модели возвращает модель как JSON с использованием метода toJson.

Таким образом, модель реализует как ArrayableInterface, так и JsonableInterface. Это означает, что вы можете напрямую позвонить toJson или toArray на модель.

Теперь вы можете пометить столбцы как скрытые. Это означает, что когда модель преобразуется в массив или представление JSON, некоторые столбцы удаляются (считайте общедоступный API, вы не хотите, чтобы пароли отображались!). Я не совсем уверен, но, возможно, идентификатор вашей модели скрыт.

В конце дня все, что вам нужно сделать, это вернуть экземпляр.

return $client; 

Он автоматически преобразуется в JSON.

+0

Спасибо! Кажется, я ошибочно использовал документы Laravel 3. Проблема с идентификатором, как оказалось, вызвана некоторыми триггерами базы данных, после того как я удалил их, я тоже получил id. –

+0

Спасибо! Я был уверен, он должен что-то существовать, потому что Ларавел - БОЛЬШОЕ! –

1

Я вижу вопрос подобной попытку вернуть данные в Jquery JTable и тот же меня

Player::orderBy($sort)->paginate($pagesize)->getCollection(); 
return Response::view(array('Result'=>'OK','Records'=>$player->toArray())); 

для попробовать много часов я нашел решение getcollection тянуть экземпляр из объекта, а затем решить

3

Метод to_array() происходит от Laravel 3. Используйте toArray() в Laravel 4.

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