试图获取非对象Laravel的属性“ id”

时间:2018-11-21 02:40:28

标签: laravel

有人可以帮助我吗?我在尝试显示我的编辑表单时尝试获取非对象laravel的属性“ id”时遇到错误

这是我的控制器

public function edit($id)
{
    $produk = produk::where('id',$id)->first();
    return view('produk.edit',compact('produk'));
}


public function update(Request $request, $id)
{
    produk::where('id',$id)
        ->update([
            'nama' => $request->nama,
            'id_kategori' => $request->kategori,
            'qty' => $request->qty,
            'harga_beli' => $request->beli,
            'harga_jual' => $request->jual,
        ]);
   return redirect()->route('produk.index');
}

这是我的模特

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class produk extends Model
{
    protected $guarded = ['id','created_at','updated_at'];

    public function kategoris()
    {
        return $this->hasOne('App\kategori', 'id', 'id_kategori');
    }
}

这是我的观点

<select class="form-control" name="kategori">
    <option value="Pilih Kategori"></option>
    @foreach ($produk as $k)
        <option value="{{ $k->id }}" @if($produk->id_kategori == $k->id) selected @endif>{{$k->nama}}</option>
    @endforeach
</select>

3 个答案:

答案 0 :(得分:2)

正因为如此

$produk = produk::where('id',$id)->first();

这将返回一个对象而不是对象数组。这就是为什么您的视图出现错误的原因。而是使用:

$produk = produk::where('id',$id)->get();

返回对象数组。

答案 1 :(得分:0)

您正在尝试介绍槽产品的属性,但是您似乎需要介绍槽类别的集合。

添加类别以在控制器中查看:

public function edit($id)
{
    $produk = produk::find($id);
    $kategoris = kategori::all();
    return view('produk.edit',compact('produk', 'kategoris'));
}

在视图中迭代$ kategoris槽(不是$ produk):

<select class="form-control" name="id_kategori">
    <option value="Pilih Kategori"></option>
    @foreach ($kategoris as $kategori)
        <option value="{{ $kategori->id }}" @if($produk->id_kategori == $kategori->id) selected @endif>{{$kategori->nama}}</option>
    @endforeach
</select>

此外,如果外键为id_kategori,则最好使用name=id_kategori而不是name=kategori

这里不需要关联,因为您将类别ID与id_kategori属性进行了比较。但是在这种情况下,您应该将hasOne替换为belongsTo。

public function kategoris()
{
    return $this->belongsTo('App\kategori', 'id_kategori');
}

答案 2 :(得分:0)

获得安排价值的正确方法是 $k["id"]而非$k->id

我尝试使用数组错误地获取字段,收到了以下数组

[{"id": 1, "name": "Ivania", "code": 387}, {"id": 2, "name": "Robert", "code": 389}]

使用foreach检查数组

$users = $request->input('users');

foreach($users as $key => $user)
    $person = new Person();
    //incorrect form
    //$person->id = $user->id
    //the correct form
    $person->id = $user["id"];
    $person->name = $user["name"];
    $person->code = $user["code"];

    $person-> save ();
}