sql >> データベース >  >> RDS >> Mysql

遠いHasManyThrough

    Laravelにはそのような方法はないと思います。カスタムクエリを作成する必要があります。このカスタムクエリは、複数のクエリが実行されるため、非常にコストがかかる可能性があります。したがって、これに対する最適な解決策は、私によれば、ユーザーと機会を外部キーに関連付けることです。

    ただし、UserとOpportunityを外部キーにリンクしたくない場合は、これを処理するカスタムクエリを作成できます。機会とクライアントモデルの間に「hasManyThrough」関係を追加するだけです。

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

    次に、ユーザーモデルで静的関数を作成します。

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

    これで、ユーザーが実現したオポチュニティに一度にアクセスできます。

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

    これにより、IDが「1」のユーザーに関連するすべてのクライアントのすべての機会が返されます。



    1. テーブルデータを出力するmysqlphp

    2. MySQLのCOUNT(id)とCOUNT(*)

    3. PowerShellをSalesforce.comに接続する

    4. #1025-mysqlの名前変更(errno:150)でエラーが発生しました