从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)
答案 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