Лучшие практики баз данных Angular, Laravel 4 и MySQL

Я новичок в Angular и имею небольшой опыт работы с Laravel 4. Я создаю приложение, в котором пользователь может редактировать «на лету», но также сохранять в MySQL.

Первоначальный план состоял в том, чтобы использовать Angular для управления редактированием в реальном времени, а также для хранения и извлечения данных в базу данных MySQL с помощью Eloquent. Я знаю, что вы можете подключиться к БД через Angular, но я хотел бы знать, какое будет лучшее решение.

  • Лучше всего держать его отдельно или использовать Angular для всего?
  • Есть ли проблемы с производительностью при использовании Angular для всего?
  • Angular так же прост в использовании, как Eloquent для взаимодействия с БД?
  • Если я использую Eloquent для БД, легко ли передать данные в Angular?

Я уже начал создавать часть приложения для редактирования в реальном времени с помощью Angular, и я должен сказать, что нашел его очень простым в освоении и чрезвычайно мощным. Теперь мне нужно решить, как я буду обращаться с хранилищем.

Спасибо


person Ben Dubuisson    schedule 22.10.2013    source источник
comment
Может ли кто-нибудь упомянуть плюсы и минусы использования одного против другого? Кажется, я могу делать все, что хочу, используя Laravel и jQuery. Хотелось бы узнать, есть ли преимущества в использовании Angular для бизнес-логики и взаимодействия с БД?   -  person Ben Dubuisson    schedule 23.10.2013


Ответы (3)


Посмотрите этот учебник великого Дэйва Мошера, я думаю, это может быть именно то, что вы ищете, он использует Laravel, Angular и MySQL:

Скринкаст Youtube: http://www.youtube.com/watch?v=hqAyiqUs93c

Исходный код: https://github.com/davemo/end-to-end-with-angularjs

person TyndieRock    schedule 22.10.2013
comment
Спасибо посмотрю сейчас - person Ben Dubuisson; 22.10.2013

Лучший способ использовать angular.js и laravel - использовать REST API.

Например, если у вас есть панель администратора для управления пользователями, метод будет следующим:

На вашем маршруте

Route::resource('users', 'UsersController');

Контроллер выглядит так,

<?php

/**
*
* Users  Controller
* 
*/

class UsersController extends AdminController {

    /**
     * Display all users.
     *
     * @return Response
     */

    public function index() {

        $users = User::where('id', '!=', Auth::user()->id)->get();

        return Response::json(array(
            'status' => 'success',
            'users' => $users->toArray()),
            200
        );

    }


    /**
     * Show the form for creating a new resource.
     *
     * @return Response
     */

    public function create() {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @return Response
     */

    public function store() {
        // add some validation also
        $input = Input::all();

        $user = new User;

        if ( $input['name'] ) {
            $user->name = $input['name'];
        }
        if ( $input['username'] ) {
            $user->username = $input['username'];
            $user->password = Hash::make($input['username']);
        }
        if ( $input['email'] ) {
            $user->email = $input['email'];
        }


        $user->save();

        return Response::json(array(
            'status' => 'success',
            'users' => $user->toArray()),
            200
        );
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return Response
     */

    public function show($id) {
        $user = User::where('id', $id)
                    ->take(1)
                    ->get();

        return Response::json(array(
            'error' => false,
            'users' => $user->toArray()),
            200
        );
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return Response
     */

    public function edit($id) {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  int  $id
     * @return Response
     */

    public function update($id) {
        // add some validation also
        $input = Input::all();

        $user = User::find($id);

        if ( $input['name'] ) {
            $user->name = $input['name'];
        }
        if ( $input['username'] ) {
            $user->username = $input['username'];
        }
        if ( $input['email'] ) {
            $user->email = $input['email'];
        }


        $user->save();

        return Response::json(array(
            'status' => 'success',
            'message' => 'User Updated'),
            200
        );
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return Response
     */

    public function destroy($id) {
        $user = User::find($id);

        $user->delete();

        return Response::json(array(
            'status' => 'success',
            'message' => 'User Deleted'),
            200
        );
    }

}

Затем сценарий,

var app = angular.module('myApp', []);
// include this in php page to define root path
app.factory('Data', function(){
    return {
        root_path: "<?php echo Request::root(); ?>/"
    };
});

GET - получить всех пользователей

$http({method: 'GET', url: Data.root_path + 'users'}).
success(function(data, status, headers, config) {
    $scope.users = data.users;
}).
error(function(data, status, headers, config) {
    $scope.users = [];
});

GET - получить одного пользователя для редактирования

$http({method: 'GET', url: Data.root_path + 'users/'+id}).
success(function(data, status, headers, config) {
    $scope.entry = data.users[0];
}).
error(function(data, status, headers, config) {
    $scope.entry = [];
});

PUT - обновление для одного пользователя

$http.put(Data.root_path + 'users/'+entry.id, entry).
success(function(data, status, headers, config) {
    //
}).
error(function(data, status, headers, config) {
    //
});

POST - Сохранить нового пользователя

$http.post(Data.root_path + 'users', entry).
success(function(data, status, headers, config) {
    //
}).
error(function(data, status, headers, config) {
    //
});

УДАЛИТЬ - Удалить пользователя

$http.delete(Data.root_path +'users/'+id)
.success(function(response) { 
    //
})
.error(function(response) {
    //
});
person devo    schedule 22.10.2013
comment
Видите ли вы какое-либо преимущество в использовании Angular перед Laravel для бизнес-логики в этом случае? Как вы думаете, это поможет сбалансировать нагрузку между сервером и клиентом? - person Ben Dubuisson; 23.10.2013
comment
Мне очень нравится Laravel 4 + Angular JS, который используется для создания настраиваемого гибкого фреймворка. - person devo; 23.10.2013

Создавайте конечные точки RESTful для управления ресурсами с помощью Laravel. Это очень просто с контроллером ресурсов, как уже указывалось:

Route::resource('user', 'UsersController');

Затем вы используете ресурс AngularJS для взаимодействия с ним. Пример (из документации) выборки пользователя, редактирования модели и последующего сохранения (вызов через $ в обратном вызове).

var User = $resource('/user/:userId', {userId:'@id'});
var user = User.get({userId:123}, function() {
  user.abc = true;
  user.$save();
});

http://docs.angularjs.org/api/ngResource.%24resource

Еще лучше, создайте Angular JS Service для ресурса, чтобы вы могли просто внедрить его в несколько контроллеров и получить все определенные методы.

Вот отличный пост о том, как это настроить:

http://blog.brunoscopelliti.com/building-a-restful-web-service-with-angularjs-and-php-more-power-with-resource

person jimbo2087    schedule 28.10.2013