创建后 - 为什么不回归关系?

时间:2017-01-07 20:43:23

标签: php laravel laravel-5 laravel-5.3

使用create()创建条目时 - 为什么它返回pilot_id表的关系而不是仅显示pilot_id的值?

例如,在存储库类中:

public function createFlight()
  $flight = App\Flight::create([
     'name' => 'Flight 10'
     'pilot_id' => 4
  ]);

  return $flight;
}

在控制器中:

public function show()
{
   $data = $this->flight->createFlight();
   return $data
}

它会在屏幕上返回json,但它没有显示pilot_id的关系表(pilot)。

2 个答案:

答案 0 :(得分:1)

尝试将以下内容添加到您的Flight模型中,就像这样。默认情况下,您需要告诉Laravel包含任何关系。

protected $with = ['pilot'];

每次包含这种关系时都会如此。如果这不合适,那么您将需要在返回航班时加载关系,如此。

return $flight->load(['pilot']);

答案 1 :(得分:1)

它显示pilot_id4,因为这就是它的价值所在。您是否在Flight上创建了relationship,以便Laravel知道如何检索Pilot的模型?看起来应该是这样的:

public function pilot()
{
    return $this->hasOne('App\Pilot');
}

当您直接从控制器返回模型时,它会调用toJson()方法将对象转换为字符串。如果要附加相关模型的内容,可以通过将关系添加到$with模型上的Flight变量来实现。

protected $with = ['pilot']