php - Laravel 8 - 一对多关系总数不起作用
问题描述
我有一个具有一对多关系的卡车和包裹表。
一辆卡车有很多包裹,一个包裹属于一辆卡车。
我有一no_of_items
列显示属于特定卡车的包裹总数。这就是我在卡车控制器中定义它的方式:
public function store(Request $request)
{
$request->validate([
'truck_number'=>'required|unique:trucks',
'no_of_items',
'postman_name'=>'required',
'date_of_operation'=>'required',
'status'=>'required'
]);
$trucks = new Truck([
'truck_number' => $request->get('truck_number'),
'no_of_items' => $request->get('no_of_items'),
'postman_name' => $request->get('postman_name'),
'date_of_operation' => $request->get('date_of_operation'),
'status' => $request->get('status')
]);
$trucks->save();
return redirect(TRUCK)->with('success', 'Truck Details Saved!');
}
但它不会在truck/index.blade.php
或其他任何地方显示任何内容。这是为什么?
我的模型:
class Truck extends Model
{
use HasFactory;
protected $primaryKey = 'truck_id';
protected $fillable = ['truck_number', 'no_of_items', 'postman_name', 'date_of_operation', 'status'];
public function Package()
{
return $this->hasMany(Package::class, 'truck_number');
}
}
class Package extends Model
{
use HasFactory;
protected $primaryKey = 'package_id';
protected $fillable = ['truck_number', 'package_number', 'destination', 'date_of_operation'];
public function Truck(){
return $this->belongsTo(Truck::class);
}
}
truck/index.blade.php
文件:
<table class="table table-striped mt-5">
<thead>
<tr>
<th>No</th>
<th>Truck Number</th>
<th>Quantity</th>
<th>Postman in Charge</th>
<th>Operation Date</th>
<th>Status</th>
<th colspan="2" class="text-center">Actions</th>
</tr>
</thead>
<tbody>
@foreach($trucks as $count => $truck)
<tr>
<td>{{++$count}}</td>
<td><a href="{{ route('truck.show',$truck->truck_id)}}">{{$truck->truck_number}}</a></td>
<td>{{$truck->Package()->count()}}</td>
<td>{{$truck->postman_name}}</td>
<td>{{$truck->date_of_operation}}</td>
<td>{{$truck->status}}</td>
<td class="text-center">
<a href="{{ route('truck.edit',$truck->truck_id)}}" class="btn btn-primary btn-block">Edit</a>
</td>
<td class="text-center">
<form action="{{ route('truck.destroy', $truck->truck_id)}}" method="post">
@csrf
@method('DELETE')
<button class="btn btn-danger btn-block" type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
<div class="text-center">
<a style="margin: 19px;" href="{{ route('truck.create')}}" class="btn btn-primary bg-success">New Truck Details</a>
</div>
解决方案
以这种方式修改您的关系,因为默认情况下,laravel 将引用与您的关系外键不匹配的模型的主 ID
public function Package()
{
return $this->hasMany(Package::class, 'truck_number','truck_number');
}
推荐阅读
- java - 如何外部化配置服务器(而不是客户端)的 application.yml?
- c# - C ++中的UDP帧丢失
- c - target_link_libraries(--wrap) 是如何工作的?
- android - NestedScrollView 内的 YouTubePlayerSupportFragment,底部行为自行滚动
- rx-java2 - 如何根据结果多次使用端点
- java - 在java中按对象的属性对ArrayList进行排序
- excel - 需要减去数据
- django-rest-framework - 有没有办法在 django 视图集中使用继承或者我必须重写函数?
- php - 比较两个多维数组并在php中按值获取数据
- wpf - 更改 .NET 的版本