я следующие модели созданы в Laravel 5 (все пространство имен в App\Models
, но я удалил, что для удобства чтения):Laravel hasManyThrough и ленивым жадная загрузка
class Client extends Model {
public function templates() { return $this->hasMany('Template'); }
public function documents() { return $this->hasManyThrough('Template', 'Document'); }
public function users() { return $this->hasMany('User'); }
}
class Template extends Model {
public function client() { return $this->belongsTo('Client'); }
public function documents() { return $this->hasMany('Document'); }
}
class Document extends Model {
public function template() { return $this->belongsTo('Template'); }
}
В контроллере, у меня есть текущий пользователь:
$user = \Auth::user();
$client = $user->client;
Я хочу, чтобы показать список
- шаблоны для клиента
- документы для клиента, отдельно, а не сгруппированы по шаблону
кажется достаточно легко; У меня уже есть оба необходимых отношения. Вопрос в том, что если я ленив нетерпеливую нагрузку templates
и documents
на $client
, мне все еще нужно оперативно заряжать templates.documents
(hasManyThrough) или Laravel достаточно умный, чтобы реализовать?
$client->load('templates', 'documents');
// or...
$client->load('templates', 'templates.documents');
// or...
$client->load('templates', 'documents', 'templates.documents');
Мне интересно, что вы изменили свой ответ; вы сами это оценили, и если да, то вы использовали онлайн-скамью? Я просто спрашиваю, потому что я ничего не знаю о L5 – Joe
На самом деле я хотел удалить его, когда я неправильно прочитал ваш вопрос (я прочитал 'hasManyThrough' как' hasMany'). Я не думаю, что есть какая-то значительная разница, поскольку документация Laravel утверждает, что это ярлык. Я не сравнивал это. –
Не проверен на 'hasManyThrough', но он должен работать одинаково: если вы загружаете' 'шаблоны ',' документы ', вы можете обращаться к ним с помощью' $ client-> документов; $ Client-> templates'. Если вы загружаете '' templates.documents'', вы можете получить к ним доступ через '$ client-> templates-> documents' –