如何使用pluck从Laravel中的其他表中获取特定数据?

问题描述 投票:0回答:4

SalesController,我想从表name中获取特定的Item,并传递给HTML。

我的控制器看起来像

public function index()
{
    $items=Item::orderBy('name','ASC')->get()->pluck('name','id');
    $sales=Sale::all();
    return view('Sale.index')->with('sales',$sales,'items',$items);
}

我的HTML是

            <thead>
                <tr>
                    <th>No</th>
                    <th>Name</th>
                    <th>Quantity</th>
                    <th>Total Price</th>
                    <th>Detail</th>
                </tr>
            </thead>
            <tbody>
                @foreach($sales as $sale)
                    <tr>
                        <td>{{ $sale->id }}</td>
                        <td>{{ $sale->items->name }}</td>
                        <td>{{ $sale->quantity }}</td>
                        <td>RM {{ $sale->price }}</td>
                        <td>{{ $sale->created_at }}</td>
                    </tr>
                @endforeach
            </tbody>

但是尝试访问页面后出现以下错误:

试图获取非对象的属性“名称”(视图:C:\ xampp \ htdocs \ inventoryApp \ resources \ views \ Sale \ index.blade.php)

php mysql laravel phpmyadmin
4个回答
1
投票

有两种方法

1。使用关系

class Sale extends Model
{
    public function item()
    {
        return $this->belongsTo('App\Item','item_id','id');
    }

}

所以您可以像下面这样使用

<td>{{ $sale->item->name }}</td>

2。使用数组数据

public function index()
{
     $items=Item::orderBy('name','ASC')->pluck('name','id')->toArray();
     $sales=Sale::all();
     return view('Sale.index')->with('sales',$sales,'items',$items);
 }



<td>{{ $items[$sale->item_id] }}</td>

0
投票
$items=Item::orderBy('name','ASC')->pluck('name','id');

并且不使用$items对象直接使用sale


0
投票

如果您与销售表有关系。

将此功能添加到您的销售类别。

public function item()
{
    return $this->belongsTo('App\Item');
}

在控制器中,您可以使用紧凑型

public function index()
{
    $items=Item::orderBy('name','ASC')->get();
    $sales=Sale::all();
    return view('Sale.index')->compact('sales','items');
}

并且您可以对HTML使用Eager加载。

<tbody>
            @foreach($sales as $sale)
                <tr>
                    <td>{{ $sale->id }}</td>
                    <td>{{ $sale->item->name }}</td>
                    <td>{{ $sale->quantity }}</td>
                    <td>RM {{ $sale->price }}</td>
                    <td>{{ $sale->created_at }}</td>
                </tr>
            @endforeach
        </tbody>

0
投票

之所以出现此错误,是因为您试图获取销售对象上不存在的商品名称属性。您可以通过雄辩的关系简单地做到这一点,如下所示:在您的销售模型上:

public function item()
{
    return $this->belongsTo('App\Item','item_id');
}

在您的控制器上:

public function index()
{
     $sales=Sale::all();
     return view('Sale.index',compact('sales'));
}

然后,您可以在刀片上轻松获得相关的项目名称:

@foreach($sales as $sale)
    <tr>
        <td>{{ $sale->item->name }}</td>
    </tr>
@endforeach
© www.soinside.com 2019 - 2024. All rights reserved.