Попытка получить свойство ‘name’ необъектной ошибки в laravel

#laravel #request

#laravel #запрос

Вопрос:

вот моя функция.

 public function get(Request $request){
       
        $bike1 = $request->input('bike1');
        $bike2 = $request->input('bike2');
        //dd($bike1);
        return $bike2->name;
    }
  

Когда я использую функцию dd, результат:

 "{"id":1,"created_at":"2020-09-16T12:33:25.000000Z","updated_at":"2020-09-16T12:33:25.000000Z","name":"302r","brand":"benelli","price":800000,"displacement":300,"segment":"300cc","power":"28KW@10000 rpm","torque":"27Nm@9000rpm","fuel_delivery_system":"Efi","abs":"1","cooling_system":"Liquid","weight":155} ◀"
  

Но когда я пытаюсь получить доступ к свойству name (любому), я получаю сообщение об ошибке.

 Trying to get property 'name' of non-object
  

Чего мне может не хватать?

Комментарии:

1. попробуйте return $bike2['name']; вместо `return $bike2->name;

2. вы не можете использовать $bike2->name; , поскольку $bike2 это не какой-либо экземпляр класса. использовать $bike2['name'];

Ответ №1:

Похоже, что $bike1 — это строка JSON, прежде чем вы сможете получить доступ к ее атрибутам, вам нужно ее декодировать.

 $bike1 = json_decode($request->input('bike1'));
return $bike1->name
  

Если это не сработает, $bike1 может быть массивом, а не объектом, в этом случае это должно сработать

 return $bike1['name']
  

Комментарии:

1. да, это сработало с первым методом. большое вам спасибо.

Ответ №2:

вы пропустили, что вернули строку, а не объект

Комментарии:

1. как я могу вернуть его в объект?

Ответ №3:

сначала расшифруйте ваш json, а затем получите ваше имя

 $bike2 = json_decode($request->input('bike2'));
return $bike2->name
  

Ответ №4:

Вам нужно декодировать $bike2 , потому что оно в формате JSON, поэтому вы можете сделать

 $decoded_bike2 = json_decode($request->input('bike2'));
  

Это вернет объект

 {#1236 ▼
   "id": 1
   "created_at": "2020-09-16T12:33:25.000000Z"
   "updated_at": "2020-09-16T12:33:25.000000Z"
   "name": "302r"
}
  

вы можете получить доступ к свойству name следующим образом

 return $decoded_bike2->name;
  

Если вы сделаете

 $decoded_bike2 = json_decode($request->input('bike2'), true);
  

Это вернет массив

 array:4 [▼
  "id" => 1
  "created_at" => "2020-09-16T12:33:25.000000Z"
  "updated_at" => "2020-09-16T12:33:25.000000Z"
  "name" => "302r"
]
  

Вы можете получить доступ к имени ключа, например

 return $decoded_bike2['name'];
  

Для получения более подробной информации о json_decode() ссылке