【发布时间】:2021-01-08 03:06:55
【问题描述】:
我正在开展一个项目,我们有一个服务提供商模型、提供的护理类型和状态:
提供者:
class Provider extends Model
{
protected $table = 'providers';
public function status() {
return $this->belongsTo('App\Status');
}
public function caretype() {
return $this->belongsTo('App\CareType', 'id');
}
}
护理类型:
class CareType extends Model
{
protected $table = 'type_of_care';
public function providers() {
return $this->hasMany('App\Providers', 'type_of_care_id');
}
public function category() {
return $this->belongsTo('App\CareCategory');
}
}
状态:
class Status extends Model
{
protected $table = 'status';
public function providers() {
return $this->hasMany('App\Providers');
}
}
在我的SearchController(处理提供者搜索请求的控制器)上,使用预加载的show() 函数可以完美地检索caretype。但在列出搜索结果集合的search() 函数上,caretype 始终列为空。
我不明白为什么它会在一个函数中起作用,而在另一个函数中不起作用,尤其是当两个函数中的预加载代码完全相同时:
public function search(Request $request)
{
$validated = $request->validate([
//I removed the validation code for this post
]);
$providers = Provider::with(['status', 'caretype'])->get();
return view('search.results', ['providers' => $providers]);
}
public function show($id)
{
$single_provider = Provider::with(['status', 'caretype'])->where('id', $id)->first();
return view('search.details', ['provider' => $single_provider]);
}
对此的任何帮助将不胜感激。我知道模型和关系外键定义正确,因为show() 函数能够得到caretype 就好了。
【问题讨论】:
标签: php mysql laravel laravel-6 eager-loading