Myślę, że w Laravelu nie ma takiej metody. Musisz stworzyć własne zapytanie. To zapytanie niestandardowe może być bardzo kosztowne, ponieważ zostanie wykonanych wiele zapytań. Zatem optymalnym rozwiązaniem według mnie jest powiązanie użytkownika i możliwości z kluczem obcym.
Jeśli jednak nie chcesz łączyć użytkownika i możliwości za pomocą klucza obcego, możesz utworzyć niestandardowe zapytanie, aby to obsłużyć. Po prostu dodaj relację „hasManyThrough” między modelem możliwości a klientem, na przykład
<?php
class Client extends Eloquent{
public function store(){
return $this->hasMany('Store');
}
public function user(){
return $this->belongsTo('User');
}
public function opportunity(){
return $this->hasManyThrough('Opportunity', 'Store');
}
}
Następnie utwórz funkcję statyczną w modelu użytkownika.
<?php
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
public function client(){
return $this->hasMany('Client');
}
public function store(){
return $this->hasManyThrough('Store', 'Client');
}
public static function getOpportunityOfUser($userId)
{
$clients = User::find($userId)->client;
foreach ($clients as $client) {
$opportunities[] = Client::find($client->id)->opportunity;
}
return $opportunities;
}
}
Teraz możesz za jednym razem uzyskać dostęp do możliwości związanych z użytkownikiem, na przykład
Route::get('/', function()
{
return $usersOpportunities = User::getOpportunityOfUser(1);
});
Spowoduje to zwrócenie wszystkich możliwości wszystkich klientów związanych z Użytkownikiem o identyfikatorze „1”.