2017-04-12 23 views
0

Serviceを持つことができるBookingモデルがあります。Laravel 1対多のモデル関係は動作しません

私はこのような予約モデルでの関係を定義しています

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 
use App\Service; 

class Booking extends Model 
{ 

    /** 
    * Get the services for the booking. 
    */ 
    public function services() 
    { 
     return $this->hasMany('App\Service'); 
    } 
} 

その後、私のBookingControllerに私はこのような現在の予約のためのすべてのサービスを取得しよう:

public function create() 
    {  
     $services = Booking::find(1)->services; 
     return view('bookings.create'); 
    } 

私は続けますエラーが発生する:

Trying to get property of non-object

ここで間違っていることはわかりません。外部キーの関係はすべて上手く設定されています。私はbooking_idの列をservicesテーブルに持っていて、bookingsテーブルのidを参照しています。

ご協力いただければ幸いです。

+0

予約クラスをインポートしました。データベースにレコードがあります。 –

+1

'find'は' null'を返すことができます。 'id = 1'の予約は存在しますか? – lagbox

+0

@lagboxああ、私はそれが問題だと思う。 id = 1の予約はありませんでした。私は存在していた予約IDで試してみました。これを答えとして書くと、私はそれをうれしく受け入れます。 – user3574492

答えて

1

Booking::find(1);は、1の予約のプライマリキーでクエリを実行します。見つからない場合は、nullを返します。そのようなnullをオブジェクトとして使用しようとすると、「非オブジェクトのプロパティを取得しようとしています」というエラーが表示されます。

0

あなたの鍵は、あなたがそれらを指定しようとすることができlaravelモデルによって生成されたものではありません場合は、次の問題は、雄弁はid == 1で予約を見つけることができないということはおそらくあり、この特定のケースで

return $this->hasMany('App\Service', 'foreign_key', 'local_key'); 
0
public function create() 
    {  
     $services = Booking::find(1)->services; 
     return view('bookings.create'); 
    } 

上記のコードを確認してください:id 1で記録していることを確認してください。プライマリおよび外部キーを確認してください。