2016-01-16 1 views
1

Мне очень нравится, как laravel поддерживает отношения только с некоторыми строками кода. Но когда есть огромный объем данных, он замедляется, делая множество запросов в базу данных.Laravel Relationships vs. Runtime -> как уменьшить количество запросов к файлам данных

class Object extends Model { 
    public function users() { 
     return $this->hasMany(User::class); 
    } 
} 

class User extends Model { 
    proteced $appends = [ 
     'url' 
    ]; 

    public function object() { 
     return $this->belongsTo(Object::class); 
    } 

    public function getUrlAttribute() { 
     return 'exmaple.com/object/' . $this->object->value . '/user/' . $this->id; 
    } 
} 

Когда я называю

return Object::with('users')->find(2); 

он будет делать всегда новый запрос к базе данных для генерации URL.

Так есть ли чистый способ уменьшить количество запросов, чтобы я мог ускорить приложение?

+0

Кэш можно использовать, например, с помощью этого пакета: https://github.com/dwightwatson/rememberable. Или используйте 'Object :: with ('users') -> get()' для извлечения всех объектов, а затем используйте foreach – balping

+0

Я пробовал обычную функцию кеширования laravel с файлом, но время все равно. – mimo

ответ

0

В этом случае вы вызываете новые запросы, потому что вы вызываете отношения, которые не загружаются на пользователя. Вы могли бы хотелось нагрузки больше:

Object::with('users.object').... 

Но вы также можете продолжать идти вниз эту линию бесконечно из-за пути эти ссылки друг друга.

Возможно, этот метод не относится к модели пользователя, если вы намереваетесь использовать его таким образом.