dimanche 5 février 2017

Laravel 5.3 - caching information schema queries

I use multiple domains for the same site structure, so almost all tables have the domain_id column. So, to NOT define the domain_id condition every time I am using the following approach (not sure if this is the best one)

I created BaseModel that other models are extending from and have this in boot method of that BaseModel

parent::boot();
static::addGlobalScope(new DomainScope());

and here is the apply method's content according to docs

if (Schema::hasColumn($model->getTable(), 'domain_id')) {
    $builder->where('domain_id', '=', DOMAIN_ID);
}

This works great, however if I have e.g. 5 find queries on the same page, to the same table (just as an example) in debug panel I see 5 queries like this

select column_name from information_schema.columns where table_schema = 'my_db_name' and table_name = 'my_table_name'

Now, I perfectly understand that to check whether the column exists in the table it gets the information from information schema, but why it is making the same query for the same table over and over again. I would presume It should make one request and then cache it, and for subsequent requests just read from cache.

q1) Does laravel internally cache this query ? I am thinking maybe because debug is enabled, that is why each time its making a query ? but cant find any verification of this

q2) and if it does not cache, can I cache it manually. I checked the laravel docs for adding a cache, but the problem here that query is not done by me, so I cant figure out to simply use Cache::remember

Thanks



from Newest questions tagged laravel-5 - Stack Overflow http://ift.tt/2lcPHIN
via IFTTT

Aucun commentaire:

Enregistrer un commentaire