Запрос ко всему содержимому таблицы в связанной модели в laravel - PullRequest
2 голосов
/ 14 апреля 2020

Предположим, у нас есть имя модели "Article" в Laravel и мы хотим сделать запрос для получения последних статей, поэтому один из способов - определить метод в модели "Article", например:

public function newArticle()
{
    return  static::where('created_at', '>', Carbon::subMonths(1));
}

Вопрос в том, почему мы должны использовать

stati c ::

в приведенном выше коде?

Возможно ли использовать

$ this или self ::

вместо

"stati c ::"?

Заранее спасибо

1 Ответ

1 голос
/ 14 апреля 2020

Вы могли бы, но нет никакого интереса, потому что:

  • where метод не существует статически в классе Illuminate\Database\Eloquent\Model, поэтому он вызывает __callStatic magi c метод, который делегирует вызов экземпляру
/**
     * Handle dynamic static method calls into the method.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public static function __callStatic($method, $parameters)
    {
        return (new static)->$method(...$parameters);
    }
  • Он вызывает метод where в экземпляре, но он также не существует, поэтому он вызывает метод __call magi c, который делегирует ему Illuminate\Database\Eloquent\Builder экземпляр.
/**
     * Handle dynamic method calls into the model.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        if (in_array($method, ['increment', 'decrement'])) {
            return $this->$method(...$parameters);
        }

        return $this->forwardCallTo($this->newQuery(), $method, $parameters);
    }
/**
     * Get a new query builder for the model's table.
     *
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function newQuery()
    {
        return $this->registerGlobalScopes($this->newQueryWithoutScopes());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...