Ik denk niet dat er zo'n methode is in Laravel. U moet uw aangepaste query maken. Deze aangepaste zoekopdracht kan erg duur zijn, omdat er meerdere zoekopdrachten worden uitgevoerd. De optimale oplossing hiervoor is volgens mij dus om User en Opportunity te relateren aan een refererende sleutel.
Als u User en Opportunity echter niet aan een externe sleutel wilt koppelen, kunt u een aangepaste query maken om dit af te handelen. Voeg eenvoudig een "hasManyThrough"-relatie toe tussen Opportunity en Client-model, zoals,
<?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');
}
}
Maak vervolgens een statische functie in het gebruikersmodel.
<?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;
}
}
Nu heb je in één keer toegang tot Opportunity die aan een gebruiker is gekoppeld,
Route::get('/', function()
{
return $usersOpportunities = User::getOpportunityOfUser(1);
});
Dit retourneert alle kansen van alle klanten gerelateerd aan Gebruiker met id '1'.