2014-11-02 3 views
0

Hello Stackoverflowers,Создать запись с Laravel's Eloquent

Я сейчас разрабатываю веб-страницу с Laravel 4.2. Я справился с несколькими проблемами самостоятельно, но теперь я застрял в этом. Я попытался создать новую запись DB для моей таблицы MySQL structures. Проблема подключения может быть исключена.

Все соединения, похоже, работают, поскольку все возвращают HTTP-статус 200 - ОК, возможно, более опытные разработчики могут мне помочь! Пространства имен в порядке, и все классы доступны. Большое спасибо заранее!

Вопрос: Почему контроллер не вставляет какие-либо данные в базу данных. Я использую неправильную функцию-контроллер create, или я использую ее неправильно?

StructuresМодель файл в /app/models/db/Structures.php

namespace Database; 
class Structures extends \Eloquent { 
    protected $table='structures'; 
    protected $protected = array(); 
} 

Соответствующий контроллер в /app/controllers/admin/api/StructuresController.php (пространство имен Контроллеры \ вопросы Администратор \ API может быть exluded)

public function create($data = null) 
{ 
    Structures::create($data)->save(); 
    return Response::json(array('success' => true)); 
} 

Я звоню контроллер выше с $http распложен в AngularJS

angular.module('PagesService', []) 
.factory('Structure', function($http) { 
    return { 
     save : function(structureData) { 
      return $http({ 
       method: 'POST', 
       url: 'admin/api/structures', 
       headers: { 'Content-Type' : 'application/x-www-form-urlencoded' }, 
       data: $.param(structureData) 
      }); 
     } 
    } 
}) 

Это соответствующий контроллер для службы

angular.module('PagesController', []) 
.controller('StructureController', function($scope, $http, Structure) { 
    $scope.newStructure = function() { 
     Structure.save({ 
      'title': "Änderbar", 
      'type': "markdown", 
      'page-id': 1, 
      'order': 3, 
      'class': '', 
      'text': "Testtext" 
     }) 
      .success(function(data) { 
       ... 
      }) 
      .error(function(data) { 
       console.log(data); 
      }); 
     return false; 
    } 
}); 

routes.php файл (экстракт)

Route::resource('admin/api/structures', 'Controllers\Admin\API\StructuresController'); 
+0

, что ваш вопрос? – charlietfl

+0

Обновлена ​​запись. Я не уверен, в чем проблема. Я использую контроллер неправильно? – barfoos

+0

Я не думаю, что это вызывает проблему, но если вы используете 'create()', вам не нужно вызывать 'save()' он автоматически вставлен в db – lukasgeiter

ответ

0

Теперь, я обнаружил несколько проблем, которые привели к одному большая проблема. Как предполагалось, Пространства имен, Миграции базы данных и $http -Услуги настроены правильно. Большое спасибо @lukasgeiter.

Вопрос первого я обнаружил, что $http -Service вызова в AngularJS как:

$http({ 
    method: 'POST', 
    url: 'admin/api/structures', 
    headers: { 'Content-Type' : 'application/x-www-form-urlencoded' }, 
    data: $.param(structureData) 
}) 

... вызывает функцию магазина() в моих StructureController (см моих маршрутов .php extract)

второй вопрос я нашел был мой модель белый список. Я заполнил $fillable -array() всеми столбцами, которые я хотел изменить.

protected $fillable = ['title', 'page-id', 'type', 'order', 'class', 'src', 'figcaption', 'text', 'data']; 

Вопрос последнего я обнаружил, что create -функций могут быть заполнены данными, учитывая, как пары по Structure.get() в моем PagesController (AngularJS).

Structures::create(
    array(
     'title' => Input::get('title'), 
     'page-id' => Input::get('page-id'), 
     'type' => Input::get('type'), 
     'order' => Input::get('order') 
    ) 
); 

Пожалуйста обязательно включать Illuminate\Support\Facades\Input класса в в верхней части контроллера, как:

namespace ...; 
use ..., Illuminate\Support\Facades\Input; 

class StructuresController extends \BaseController { 
... 
}