Я заблудился в этой ситуации и хотел бы получить некоторые отзывы / советы о том, как это сделать.
Я создаю приложение с бэк-эн Laravel 5.1 и интерфейсом AngularJS. Оба новы для меня, но я люблю их до сих пор. Для связи с базой данных я использую Propel 2.
Итак, я получил свой объект Order в настройке Laravel с Propel, который работает нормально. Чтобы использовать эту модель в Angular, я создал фабрику ресурсов.
angular.module('flex')
.factory('Order', ['$resource', 'Address', 'Person', function($resource, Address, Person)
{
var Order = $resource('/restful/shop/order/:id', {id: '@id'}, {
query: {
method: 'GET',
isArray: true,
transformResponse: function(data, header)
{
var jsonData = angular.fromJson(data);
var orders = [];
angular.forEach(jsonData, function(item)
{
var order = new Order(item);
orders.push(order);
});
return orders;
}
},
update: {
method: 'PUT',
params: {id: '@Id'},
}
});
Order.prototype.Person = null;
Order.prototype.getAddresses = function() {};
Order.prototype.getOrderProducts = function() {};
Order.prototype.getPayments = function() {};
Order.prototype.getPerson = function()
{
if (this.Person != null)
return this.Person;
var OrderObject = this;
this.Person = {};
Person.get({id: this.PersonId}, function (response)
{
OrderObject.Person = response;
});
return this.Person;
};
Order.prototype.getShippingAddress = function() {};
return Order;
}])
Как видите, у этого ресурса есть функция getPerson (), которая загружает объект person из другой фабрики ресурсов.
angular.module('flex')
.factory('Person', function($resource)
{
var Person = $resource('/restful/common/person/:id', {id: '@id'}, {
query: {
method: 'GET',
isArray: true,
transformResponse: function(data, header)
{
var jsonData = angular.fromJson(data);
var persons = [];
angular.forEach(jsonData, function(item)
{
var person = new Person(item);
persons.push(person);
});
console.log(persons);
return persons;
}
}
});
return Person;
})
Пока все отлично работает. Я могу загрузить и отобразить свои заказы и загрузить объект person с этим, а также отобразить данные из этого объекта.
Проблема возникает, когда я хочу хранить обновления. Если я вызываю Order. $ Update (), для моего действия по обновлению Laravel делается запрос на размещение.
public function update($id, Request $request)
{
// Check for orderI
// Load order
$order = OrderQuery::create()
->findPk($id);
// Iterate data
foreach ($request->all() as $key => $value)
{
echo 'set' . $key . "\n";
$order->{'set' . $key}($value);
}
// Save object
$order->save();
}
Здесь возникает проблема. setPerson для объектов Order ожидает объект Person, но отправляется простой объект только с параметрами. Я мог бы просто пропустить ввод, который не является строкой или целым числом, но что, если я обновлю детали в человеке тоже. Было бы неплохо, если бы персона тоже обновилась, но я не знаю, как лучше всего это сделать.
Мои варианты, но я надеюсь, что есть лучший способ:
«Ваши варианты должны всегда отделять маршруты от проблем. Если для приложения это не имеет значения, сохраняйте единый маршрут, который выполняет обе задачи». Я не вижу вашего setPerson или как вы называете order.person в угловых (вместе с какими данными вы передаете)? Вы можете хранить все по одному маршруту, но убедитесь, что вы используете правильные методы для выполнения работы.
«Здесь возникает проблема. SetPerson для объектов Order ожидает объект Person, но отправляется простой объект с просто параметрами. Я мог бы просто пропустить ввод, который не является строковым или целочисленным, но что, если я обновлю детали этого человека тоже. было бы хорошо, если бы Человек тоже обновился, но я не знаю, как лучше это сделать «. Можете ли вы объяснить это больше?
Других решений пока нет …