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

时间:2019-11-19 04:53:26

标签: php mysql laravel

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)

4 个答案:

答案 0 :(得分:2)

有两种方法

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>

答案 1 :(得分:0)

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

并直接使用$items,而没有sale对象

答案 2 :(得分:0)

如果您与表Sale有关系。

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

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>

答案 3 :(得分: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