вы передаете идентификатор партнера , а не партнер объект коллекции
, так что используйте это
public function update(Request $request, $id)
{
$this->validate($request, [
'name' => 'required|string|max:255',
'image' => 'sometimes|image|mimes:jpg,jpeg,png',
]);
$partner = Modelname::findOrFail($id); //add this line (add your modelname)
$partner->update([
'name' => $request['name'],
]);
if (request()->file('image')) {
$partner->update([
'image' => request()->file('image')->store('images', 'public'),
]);
}
return redirect()->route('partner.index', $partner);
}
Если новый и удаляют, идут рука об руку.
Для удаления чего-то, необходимо создать его через новый (который дает Вам подсказку). Можно затем удалить указатель. Путем Вы объявляете вектор, он создается на стеке (не "куча") и будет освобожден, когда он выходит из объема.
int main()
{
vector<SomeClass> theVector;
vector<SomeClass>* ptrVctor = new vector<SomeClass>();
delete ptrVctor; // ptrVctor must be deleted manually
// theVector destroyed automatically here
}
В C++ (в отличие от Java), можно создать объекты или на стеке или на "куче". Пример создания его на стеке, поскольку Вы сделали:
vector<SomeClass> theVector;
Этот объект выходит из объема, когда стековый фрейм исчезает (обычно, когда Вы возвращаетесь из функции, которая создала объект.
Создание объектов на "куче" позволяет им переживать функцию, которая создала их, и Вы делаете это путем выполнения:
vector<SomeClass> *theVectorPtr = new vector<SomeClass>();
Можно затем передать theVectorPtr
указатель назад на вызывающую сторону функции (или хранилище это глобально, независимо от того, что Вы хотите).
Для избавлений от объекта на "куче" Вы явно удаляете его:
delete theVectorPtr;
где-нибудь в Вашем коде.
Удаление объекта на "куче" заканчивает объем того объекта, тот же способ возвратиться из функции заканчивает объем переменных, созданных на стеке.
Память для theVector является частью памяти, выделенной для объекта SomeClass, таким образом, Вы не можете удалить его, не удаляя весь объект SomeClass. Память для theVector будет автоматически освобождена, когда объект SomeClass будет разрушен.
Если объект (а не значение) определяется как членская переменная класса, то ее устройство хранения данных всегда связывается с экземпляром объекта того класса.
Поэтому, если содержание объекта будет выделено на стеке, то тот объект и поле умрут, когда стек развернет.
Если содержание объекта будет выделено на "куче", то объект поля умрет, когда все, содержащее объект, умрет с, удаляют.
Вы будете только подавать заявку, удаляют к полю, если это - указатель, начиная со все, что снабжено содержанием объекта, адрес некоторой другой области памяти, и Вы удаляете материалы в той области.
Уничтожать все объекты содержало в векторе, Вы сделали бы следующее:
theVector.resize(0);
Это произойдет автоматически, когда вектор выйдет из объема.
Это вызвано тем, что theVector не является указателем, который является что delete' expects. "Expected pointer" means the operand of
удалите', должен быть указатель.
Сравните это с
int theInt;
delete theInt;
Это, конечно, генерирует ошибку, подобную тому, что Вы получили.
C++ дает Вам гибкость для создания объекта в стеке и "куче". То, когда объект создается в "куче" через новый оператор как показано ниже его, возвращает указатель на объект в "куче".
ClassA * pobj_class = new ClassA();
Для объекта, созданного в стеке, конструктор возвращает объект, а не указатель как показано ниже.
ClassA obj_class();
и стек возражает автоматически уничтоженный, когда переменная (obj_class) выходит из объема, но объекта, созданного на жизнях "кучи" навсегда. Таким образом для уничтожения C++ объекта "кучи" дает Вам оператор delete, который берет указатель в качестве аргумента и уничтожает объект, на который указывает указатель.