Я потерялся в этой ситуации и хотел бы получить некоторые отзывы/советы о том, как это сделать.
Я создаю приложение с поддержкой 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;
})
Пока все отлично работает. Я могу загрузить и отобразить мои заказы и загрузить объект человека с этим, а также отобразить данные с этого объекта.
Проблема возникает, когда я хочу хранить обновления. Если я вызываю "Заказ". $ 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, но отправляется простой объект с просто параметрами. Я мог бы просто пропустить ввод, который не является строкой или целым числом, но что, если бы я обновил детали в персоне. быть хорошим, если бы человек тоже был обновлен, но я не знаю, как лучше всего это сделать ". Можете ли вы объяснить это больше?