Если вы хотите понять, почему вы называете отношение как свойство, а не как метод, вот почему:
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
ваш ответ.