Laravel 5.4 预加载 belongsToMany 关系 null 绑定
Laravel 5.4 Eager loading belongsToMany Relationship null Binding
我有一个现有模型,它可以很好地延迟加载 belongsToMany 关系。
我的问题是,当我尝试预先加载关系时,我得到一个空结果。
当我检查查询时,它显示关系查询的绑定为空。
这是我的(简化)代码:
// Controller
public function filter(Request $request, App\Programs $program)
{
$program = $program->newQuery();
$program->select(
'slug',
'title',
'season'
);
$program->with([
'sports'
]);
return $program->get();
}
// Model
class Programs extends Model
{
public function sports(){
return $this->belongsToMany('App\Sport', 'program_sport', 'program_id', 'sport_id');
}
}
问题是您没有从数据库中获取 id
,因此 Eloquent 无法获取相关模型。而不是:
$program->select(
'slug',
'title',
'season'
);
你应该使用:
$program->select(
'id',
'slug',
'title',
'season'
);
请注意,您可以使用更简单的语法(并且不要像这样在控制器中注入模型):
return Program::select('id','slug', 'title', 'season')->with('sports')->get();
我也不知道你为什么在那种情况下使用路由模型绑定
我有一个现有模型,它可以很好地延迟加载 belongsToMany 关系。
我的问题是,当我尝试预先加载关系时,我得到一个空结果。
当我检查查询时,它显示关系查询的绑定为空。
这是我的(简化)代码:
// Controller
public function filter(Request $request, App\Programs $program)
{
$program = $program->newQuery();
$program->select(
'slug',
'title',
'season'
);
$program->with([
'sports'
]);
return $program->get();
}
// Model
class Programs extends Model
{
public function sports(){
return $this->belongsToMany('App\Sport', 'program_sport', 'program_id', 'sport_id');
}
}
问题是您没有从数据库中获取 id
,因此 Eloquent 无法获取相关模型。而不是:
$program->select(
'slug',
'title',
'season'
);
你应该使用:
$program->select(
'id',
'slug',
'title',
'season'
);
请注意,您可以使用更简单的语法(并且不要像这样在控制器中注入模型):
return Program::select('id','slug', 'title', 'season')->with('sports')->get();
我也不知道你为什么在那种情况下使用路由模型绑定