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, потому что я не знаю, где я падаю, чтобы я мог обновить свои данные

Author: J. Castro, 2018-08-02

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();
        }
    }
}
 2
Author: Julio Lago, 2018-08-02 17:48:19

Я проверил, что он должен быть включен, в этом случае;

$detalle->save();

Внутри условного if else

Приветствия

 -1
Author: Luis Burgos, 2020-11-10 18:27:27