2016-07-20 6 views
1

У меня есть модель Card, которая имеет много заметок. И у каждой заметки есть автор. Я готов нагружать индивидуальную карту в show действий в моем CardsController так:Laravel Eloquent: как мне реорганизовать этот нетерпеливый запрос загрузки в метод модели?

$card = $card->load(['notes' => function($query){ 
    $query->orderBy('created_at', 'desc')->limit(8); 
}, 'notes.author']); 

Этот запрос работает. Я хочу сейчас реорганизовать это в модель, поэтому я могу просто позвонить $card = Card::popular() в свой контроллер. Так добавить этот метод к моей Card модели:

public function scopePopular() 
    { 
     $results = $this->with(['notes' => function($query){ 
      $query->orderBy('created_at', 'desc')->limit(8); 
     }, 'notes.author']); 

     return $results; 
    } 

Это портит все. Я начинаю получать нечитаемые ошибки шаблонов, когда ничто не должно действительно ломаться.

Что я делаю неправильно?

+0

Что такое объект '$ results'? Это то, чего вы ожидаете? Потому что вы используете 'with' вместо' load' – Pogrindis

+0

no - я использую это для отладки - он не возвращает ожидаемые результаты –

+0

Также не должно быть 'public static function'? – Pogrindis

ответ

0

Чтобы использовать его как статическую функцию и по-прежнему иметь доступ к статическим методам в классе, используйте self:: вместо $this->.

public function scopePopular() 
{ 
    $results = self::with(['notes' => function($query){ 
     $query->orderBy('created_at', 'desc')->limit(8); 
    }, 'notes.author']); 

    return $results; 
} 
+0

Как я могу назвать это с контроллера? –

+0

Вы все равно можете использовать 'Card :: popular()'. – aynber

+0

не работает :( –