2017-01-07 9 views
0

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)を示していない

+0

これは、あなたが変数$ flightで返すものです。あなたはFlightモデルを保存し、それを返します。あなたは、あなたが関係を返すことを望んでいる場所を指しているわけではありません。 – devk

答えて

1

Flightモデルに次のように追加してみてください。デフォルトでは、Laravelに関係を含めるように指示する必要があります。

protected $with = ['pilot']; 

これは、それが関係を含むたびにそうするでしょう。これが望ましくない場合は、フライトを返すときにリレーションシップをロードするといいでしょう。

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

それはそれは、その値が何であるかだからpilot_id4であることを示しています。 Flightrelationshipを作成して、LaravelがPilotのモデルを取得する方法を知っているようにしましたか?それは次のようになります。

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

あなたは、コントローラから直接モデルを返し、それがオブジェクトを文字列に変換するtoJson()メソッドを呼び出します。関連するモデルの内容を追加する場合は、Flightモデルの変数$withに関係を追加します。

protected $with = ['pilot'] 
関連する問題