z3r0
z3r0

Reputation: 139

Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model,

Trying to save one-to-one relationship between Expense and ExpenseCategory and got error like above

Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model, null given, called in /home/z3r0/Desktop/Kiyoi/laravel-kiyoi/app/Http/Controllers/V1/ExpenseController.php on line 88

i tried google and everything, but still no luck.

In Expense Model

    public function expense_category()
    {
        return $this->hasOne(\App\ExpenseCategory::class);
    }

In ExpenseCategory Model

    protected $fillable = ['expense_id', 'code', 'name', 'description'];

    public function expense()
    {
        return $this->belongsTo(\App\Expense::class, 'expense_id');
    }

In ExpenseController

    public function update(Request $request, $id)
    {
        $request->validate([
            'date' => 'required',
            'amount' => 'required',
        ]);

        $expense = Expense::findOrFail($id);
        $expense->user_id = auth()->user()->id;
        $expense->date = $request->date;
        $expense->description = $request->description;
        $expense->amount = $request->amount;
        $expense->expense_for = $request->expense_for;
        $expense->save();

        $expense_category = \App\ExpenseCategory::findOrFail($id);
        $expense_category->name = $request->name;
        $expense->expense_category()->save($request->expense_category);

        return response()->json([
            'updated' => true,
        ]);
    }

I'll appreciate of all ur help.. Thanks...

Upvotes: 0

Views: 1850

Answers (1)

patricus
patricus

Reputation: 62308

You have a typo. You're passing $request->expense_category into the save() method, but you meant to pass in $expense_category.

Change

$expense->expense_category()->save($request->expense_category);

to

$expense->expense_category()->save($expense_category);

Upvotes: 1

Related Questions