Nemyslím si, že taková metoda v Laravelu existuje. Musíte vytvořit svůj vlastní dotaz. Tento vlastní dotaz může být velmi drahý, protože bude provedeno více dotazů. Optimálním řešením je tedy podle mého názoru spojit uživatele a příležitost s cizím klíčem.
Pokud si však nepřejete propojit uživatele a příležitost s cizím klíčem, můžete vytvořit vlastní dotaz, který to zpracuje. Jednoduše přidejte vztah „hasManyThrough“ mezi model Opportunity a Client, jako je
<?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');
}
}
Poté vytvořte statickou funkci v uživatelském modelu.
<?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;
}
}
Nyní můžete přistupovat k Příležitosti realizované uživateli najednou, například
Route::get('/', function()
{
return $usersOpportunities = User::getOpportunityOfUser(1);
});
Tím se vrátí všechny příležitosti všech klientů souvisejících s uživatelem s ID '1'.