如何使用两个或多个表?

时间:2019-08-03 07:04:25

标签: php laravel eloquent left-join

我有两个表,我通过左联接来获取数据,但是由于我的数据库很大,将数据拉入dataTable需要花费太多时间。还有其他选择吗?请帮助。

    $allPolicyWithOrganization = $allPolicyWithOrganization
        ->select('policies.*', 
                 'leads.lead_id', 
                 'leads.agent', 
                 'leads.referrer_id', 
                 'leads.vendor_id', 
                 'leads.deleted_at'
                )
        //->where('policies.status', '!=', 1)
        ->leftJoin('leads', 'policies.lead_id', '=', 'leads.lead_id');

我有策略表和潜在顾客表。.我想从表中提取所有数据..要花很多时间

2 个答案:

答案 0 :(得分:0)

您应该使用数据库视图,并在设置过滤条件的位置创建这些列的索引。它将迅速获取记录。试用此解决方案,您的问题将得到解决。 #Abir Adak

答案 1 :(得分:0)

除了在需要过滤的字段中使用索引之外,您是否尝试过使用缓存?

Schema::table('leads', function (Blueprint $table) {
    $table->index(['lead_id', 
                   'agent', 
                   'referrer_id', 
                   'vendor_id', 
                   'deleted_at'
                   ]);
});

并使用缓存(在我的情况下为Redis)

use Illuminate\Support\Facades\Cache;
$allPolicyWithOrganization = Cache::tags('policies')
         ->rememberForever('all.policies.with.organization', function () {
            return $allPolicyWithOrganization
                   ->select('policies.*', 
                            'leads.lead_id', 
                            'leads.agent', 
                            'leads.referrer_id', 
                            'leads.vendor_id', 
                            'leads.deleted_at'
                           )
            //->where('policies.status', '!=', 1)
            ->leftJoin('leads', 'policies.lead_id', '=', 'leads.lead_id');
         });

当受影响的表中有更改时,请记住要清除缓存。

Cache::forget('all.policies.with.organization');

或按标签

Cache::tags('policies')->flush();

Cache Laravel