У меня есть модель, где я хочу загрузить две ссылки на другую таблицу (в данном случае posts.created_by_id == users.id
и posts.updated_by_id == users.id
).Можно ли комбинировать одноразовые нагрузки в Laravel 4?
class Post {
protected $table = 'posts';
public function scopeLatest() {
return $query->with(['created_by', 'updated_by'])
->orderBy('created_at', 'desc');
}
public function createdBy() {
return $this->belongsTo('User');
}
public function updatedBy() {
return $this->belongsTo('User');
}
}
class User {
protected $table = 'users';
public function posts() {
return $this->hasMany('Post', 'created_by');
}
}
Это приводит к чему-то вроде следующих запросов:
SELECT * FROM tbl ORDER BY created_at DESC;
SELECT * FROM users WHERE id IN (?); (created_at)
SELECT * FROM users WHERE id IN (?); (updated_at)
Это имеет смысл - мы загружаем все ссылочных записей в created_by
, а затем updated_by
- однако мы могли бы оптимизировать это совместить Иды делают один запрос до users
.
Мой вопрос: это что-то Красноречивое в настоящее время поддерживает?
Я думаю, нам нужна дополнительная информация. Каковы две модели? (Пользователи и ... tbl?). Какие данные вы хотите увидеть в результате? – fideloper
Я думаю, что ваши отношения не будут работать таким образом. attribTo принимает дополнительные параметры, которые сообщают ему, по каким столбцам связывать таблицу. Если вы хотите получить всю информацию сразу, взгляните на создание объединений с Eloquent. То есть Post :: latest() -> join ('user', 'users.id', '=', 'posts.updated_by'); –