2017-11-22 14 views
1

Laravelアプリケーションのマルチテナントアップデートを行っていますが、特定のチームIDを別のメソッドの中のモデルのメソッドに渡そうとするときに問題が発生します。同じモデル内からlaravelメソッドに変数を渡します

例:コントローラで

:予約モデルで

$waitTime = $booking->estimatedWaitTime($teamId); 

public function queueLength() 
{ 
    $booking = $this->todaysBookings; 

    foreach ($bookings as $booking) { 
     // Calculate the length of all bookings 
    } 
} 

public function todaysBookings() 
{ 
    return $this->hasMany('App\UserBooking')->whereHas('booking', function ($q) { 
     $q->where('team_id', 2); 
    }); 
} 

これは正しく予約を返し、queueLength方法でそれらをループに私を可能にします。しかし、私はtodaysBookingメソッドにteam_idを渡すことができるようにしたい。

代わりの方法としてtodaysBookingsを呼び出す場合:

$booking = $this->todaysBookings(); 

それはをループに私のために何を返しません。

私がここでやりたいことを達成するためのアイデアはありますか?

答えて

1

あなたは、パラメータとしてIDを渡すと、結果を得ることができます:あなたは次のように行うことができますコールで

public function todaysBookings($team_id) 
{ 
    return $this->hasMany('App\UserBooking')->whereHas('booking', function ($q) use($team_id) { 
     $q->where('team_id', $team_id); 
    }); 
} 

$some_teame_id = 2; 
$booking = $this->todaysBookings($some_teame_id)->get(); 

はなぜ?

laravel中関係が果たすのでとして強力なクエリビルダー(documentation):

雄弁関係があなたの雄弁モデル クラスのメソッドとして定義されています。 Eloquentモデル自体と同様に、関係も が強力なクエリビルダとして機能し、メソッドとしてリレーションシップを定義するため、強力なメソッド連鎖とクエリ機能が提供されます。

Relationship Methods Vs. Dynamic Properties

あなたはこのようないくつかのより多くの条件やフィルタを追加したいときの方法が必要とされているような関係の呼び出し:

$booking->todaysBookings()->where('active', 1)->get(); //just an example :) 

そして、あなたがする必要がない場合Eloquentリレーションシップクエリに制約を追加するだけで、リレーションシップにプロパティとしてアクセスすることができます。Laravelがget()を追加します:)

$booking->todaysBookings 
+0

興味深いことに、方法として呼び出さないときは、どういうことが起こっていますか?それはあなたがそれを取得する必要はありませんので、それを '実行'ですか? – Lovelock

+0

私はそのケースの答えを更新しました;) – Maraboc

+1

もし私が2回upvoteすることができます... :) – Lovelock

関連する問題