我的公交和路线模型试图通过公交访问路线,但出现错误
未定义的属性:stdClass :: $ route
控制器:
foreach ($Bus as $tBus){
foreach ($tBus->route as $tBusRoute) {//Undefined property: stdClass::$route
if($tBusRoute->id == $rId){
$BusRouteId = $tBusRoute->pivot->id; }
}
}
公交车型号:
class Bus extends Model
{
protected $table = 'bus';
public $primaryKey = 'id';
public $timestamp = true;
public function route(){
return $this->belongsToMany(Route::class , 'bus_route' , 'bus_id' , 'route_id')->withPivot('id');
}
路由模型:
class Route extends Model
{
protected $table = 'route';
public $primaryKey = 'id';
public $timestamp = true;
public function bus(){
return $this->belongsToMany(Bus::class , 'bus_route' , 'route_id' , 'bus_id');
}
错误:未定义的属性:stdClass :: $ route
答案 0 :(得分:1)
您直接使用查询生成器,而不是通过Eloquent进行查询。
使用模型:
a
查询生成器返回$buses = Bus::where('transport_company_id', $tld)->get();
对象的集合,因此会出现错误。如果通过模型查询,将获得模型实例的集合。
答案 1 :(得分:0)
更好地与关系使用口才。
$buses = Bus::with('route')->where('transport_company_id',$tId)->get();
答案 2 :(得分:0)
首先,您使用的是Query Builder而不是Eloquent,因此您的对象将不会被投射到模型上。尝试以下方法:
$buses = Bus::where('transport_company_id', $tld)->get();
然后,您正在遍历$buses
集合并调用该关系,因此建议您Eager Load这个值以避免N+1 problem:
$buses = Bus::with('route')->where('transport_company_id', $tld)->get();
PS:鉴于
Bus
可能有许多Route
的事实,您应该 将您的关系重命名为复数:routes
第三,您可以像这样比较结果:
$buses = Bus::with('route')->where('transport_company_id', $tld)->get();
foreach($buses as $bus)
{
foreach($bus->route as $route)
{
// now you can get the $route instance with the pivot data:
dd($route->pivot->a_pivot_field);
}
}