Attempt to assign property
Друзья, вы могли бы указать мне на эту проблему, с которой я столкнулся, я получаю массив, но когда я хочу обновить данные до моей базы, я получаю следующую ошибку:
Attempt to assign property 'stock' of non-object
мой код выглядит следующим образом:
if($det=$request->detalles) {
foreach ($det as $detalle=> $valor) {
$detalle=Detalle::where('art_id', '=', $idArt)
->where('codigo_id', '=', $valor)
->exists();
}
}
if($detalle==""){
$doNeg=false;
$errmesg="No existe articulo";
}
$detalle->stock=1;
$detalle->updated_at = Carbon::now();
if (Auth::guard('supervisor')->check()) {
$detalle->admin_id= Auth::id();
} elseif (Auth::guard('bodeguero')->check()) {
$detalle->admin_id= Auth::id();
}
$detalle->save();
Моя проблема заключается в том, когда я нажал кнопку Сохранить, и он говорит мне, что Attempt to assign property of non-object
, это помогает porfis, потому что я не знаю, где я падаю, чтобы я мог обновить свои данные
2 answers
Когда вы звоните $detalle->stock
, $подробно не существует (Если вы не пропускаете какую-либо часть кода).
В вашем цикле:
if($det=$request->detalles) {
foreach ($det as $detalle=> $valor) {
$detalle=Detalle::where('art_id', '=', $idArt)
->where('codigo_id', '=', $valor)
->exists();
}
}
Все, что вы делаете, это проверяете, существует ли деталь, которая соответствует запрошенным условиям, и сохраняет ее в $detail как true или false, потому что exists () возвращает вам true или false.
Если вы хотите создать экземпляр вашего $detail с типом Detail, вам придется сделать:
$detalle=Detalle::where('art_id', '=', $idArt)
->where('codigo_id', '=', $valor)
->first();
Это вернет вам экземпляр детали или NULL, если он не найден.
Но все же, как и внутри foreach, вы также потеряете значение $ detail при завершении цикла. Вам нужно будет вызвать некоторую функцию в том же цикле после создания экземпляра $detail. Например:
if($det=$request->detalles) {
foreach ($det as $detalle=> $valor) {
$detalle=Detalle::where('art_id', '=', $idArt)
->where('codigo_id', '=', $valor)
->first();
if($detalle) {
self::hacerLoQueTienesQueHacer($detalle);
}
}
}
public static function hacerLoQueTienesQueHacer($detalle)
{
$detalle->stock=1;
$detalle->updated_at = Carbon::now();
if (Auth::guard('supervisor')->check()) {
$detalle->admin_id= Auth::id();
} elseif (Auth::guard('bodeguero')->check()) {
$detalle->admin_id= Auth::id();
}
$detalle->save();
}
Я создал статическую функцию, потому что я понятия не имею, где вы стоите в своем коде, но если то, что вы хотите сделать, это общая задача детализации, в идеале класс Detail должен иметь функцию, называемую сделать это, и в цикле вы просто сделаете:
if($det=$request->detalles) {
foreach ($det as $detalle=> $valor) {
$detalle=Detalle::where('art_id', '=', $idArt)
->where('codigo_id', '=', $valor)
->first();
if($detalle) {
$detalle->hacerLoQueTienesQueHacer();
}
}
}
Я проверил, что он должен быть включен, в этом случае;
$detalle->save();
Внутри условного if else
Приветствия