Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Distant HasManyThrough

Ich glaube nicht, dass es eine solche Methode in Laravel gibt. Sie müssen Ihre benutzerdefinierte Abfrage erstellen. Diese benutzerdefinierte Abfrage kann sehr teuer sein, da mehrere Abfragen durchgeführt werden. Daher besteht meiner Meinung nach die optimale Lösung dafür darin, Benutzer und Gelegenheit mit einem Fremdschlüssel zu verknüpfen.

Wenn Sie Benutzer und Verkaufschance jedoch nicht mit einem Fremdschlüssel verknüpfen möchten, können Sie eine benutzerdefinierte Abfrage erstellen, um dies zu handhaben. Fügen Sie einfach eine "hasManyThrough"-Beziehung zwischen Verkaufschance und Kundenmodell hinzu, wie zum Beispiel

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

Erstellen Sie dann eine statische Funktion im Benutzermodell.

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

Jetzt können Sie auf einmal auf die Opportunity zugreifen, die einem Benutzer zugeordnet ist, wie,

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

Dadurch werden alle Opportunities aller Clients zurückgegeben, die mit dem Benutzer mit der ID „1“ in Verbindung stehen.