sql >> Database teknologi >  >> RDS >> Mysql

Fjern HasManyThrough

Jeg tror ikke, der er en sådan metode i Laravel. Du skal oprette din tilpassede forespørgsel. Denne brugerdefinerede forespørgsel kan være meget dyr, da der udføres flere forespørgsler. Derfor er den optimale løsning for dette, ifølge mig, at relatere Bruger og Opportunity med en fremmednøgle.

Men hvis du ikke ønsker at forbinde bruger og mulighed med en fremmednøgle, kan du oprette en brugerdefineret forespørgsel til at håndtere dette. Du skal blot tilføje en "hasManyThrough"-relation mellem Opportunity og Client model som,

    <?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');
        }
    }

Opret derefter en statisk funktion i Brugermodel.

    <?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 kan du få adgang til Opportunity Realted til en Bruger på én gang som,

    Route::get('/', function()
    {   
         return $usersOpportunities = User::getOpportunityOfUser(1);
    });

Dette vil returnere alle muligheder for alle klienter relateret til bruger med id '1'.



  1. Indlæser klasse `com.mysql.jdbc.Driver'. Dette er forældet. Den nye driverklasse er `com.mysql.cj.jdbc.Driver'

  2. Indsætter i Oracle og henter det genererede sekvens-id

  3. Kombiner flere resultater i en underforespørgsel til en enkelt kommasepareret værdi

  4. Sådan opretter du et alias af database i SQL Server