sql >> Database >  >> RDS >> Mysql

Distant HasManyThrough

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'.



  1. Verbinding met Db sterft na>4<24 in spring-boot jpa-slaapstand

  2. Voorwaardelijke bestelling door

  3. Inverted SQL SELECT - Vind personeel dat geen cold calls heeft gepleegd tussen een datumbereik

  4. Alleen PHP PDO laatste waarde van array wordt ingevoegd met bindValue &bindParam