У меня есть функция postShippingmethods
, в которой я удаляю, обновляю или создаю новые способы доставки в зависимости от того, что пользователь указал в форме. Он работает так, как должен, за исключением того, что если какие-либо методы удалены, я получаю пустой результат при попытке получить пользовательскую модель с обновленными методами.
Чтобы удалить методы, я сначала получаю пользователя:
$user = \App\User::where('id',$id)->with(['shipping_profiles' => function($query) {
$query->where('default', 1);
}, 'shipping_profiles.methods' ])->first();
Я сравниваю хранимые методы с методами в запросе; если они отсутствуют, их следует удалить.
Этот код делает удаление:
foreach($non_included_ids as $id){
$method = \App\ShippingMethod::find($id);
$method->suppliers()->detach();
$method->delete();
}
Затем я получаю пользователя еще раз, чтобы получить обновленные данные:
$user = \App\User::where('id',$id)->with(['shipping_profiles' => function($query) {
$query->where('default', 1);
}, 'shipping_profiles.methods' ])->first();
^^ это работает хорошо, если ничего не было удалено, но по какой-то причине , если что-то было удалено , приведенный выше код ничего не вернет. И когда я пытаюсь использовать $user
для извлечения данных, я, конечно, получаю "Trying to get property of non object"
.
Так может ли кто-нибудь объяснить, почему это происходит и что я должен сделать, чтобы пользователь получил обновленные данные?