Когда использовать только имя метода и когда вызывать метод? - PullRequest
0 голосов
/ 04 апреля 2020

Я новичок в laravel. Я изучал отношения в течение последних нескольких дней. Я заметил, что когда мы создаем новые отношения между двумя записями, мы вызываем метод и затем сохраняем его. enter image description here

Но когда мы просто читаем запись одной таблицы через другую таблицу с отношением, мы просто используем имя метода. enter image description here

Поэтому я думаю, что когда нам нужно внести изменения в записи другой таблицы, например, путем создания или редактирования, нам нужно вызвать метод. Но для простого чтения нам нужно только вызвать имя метода как свойство. Я прав или есть что-нибудь еще?

1 Ответ

0 голосов
/ 04 апреля 2020

Если вы хотите понять, почему вы называете отношение как свойство, а не как метод, вот почему:

Illuminate\Database\Eloquent\Model

/**
     * Dynamically retrieve attributes on the model.
     *
     * @param  string  $key
     * @return mixed
     */
    public function __get($key)
    {
        return $this->getAttribute($key);
    }

This PHP magi c метод вызывается всякий раз, когда вы пытаетесь получить свойство экземпляра, которое не существует (метод не является свойством, но работает аналогично благодаря __call magi c методу). Он вызывает getAttribute от черты Illuminate\Database\Eloquent\Concerns\HasAttributes

/**
     * Get an attribute from the model.
     *
     * @param  string  $key
     * @return mixed
     */
    public function getAttribute($key)
    {
        if (! $key) {
            return;
        }

        // If the attribute exists in the attribute array or has a "get" mutator we will
        // get the attribute's value. Otherwise, we will proceed as if the developers
        // are asking for a relationship's value. This covers both types of values.
        if (array_key_exists($key, $this->getAttributes()) ||
            $this->hasGetMutator($key) ||
            $this->isClassCastable($key)) {
            return $this->getAttributeValue($key);
        }

        // Here we will determine if the model base class itself contains this given key
        // since we don't want to treat any of those methods as relationships because
        // they are all intended as helper methods and none of these are relations.
        if (method_exists(self::class, $key)) {
            return;
        }

        return $this->getRelationValue($key);
    }

Последний return ваш ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...