Ответ 1
Это невозможно, потому что отношения загружаются только при запросе либо с помощью with
(для активной загрузки), либо с использованием общедоступного метода отношений, определенного в модели, например, если создана модель Author
со следующим соотношением
public function articles() {
return $this->hasMany('Article');
}
Когда вы вызываете этот метод, например:
$author = Author::find(1);
$author->articles; // <-- this will load related article models as a collection
Кроме того, как я сказал with
, когда вы используете что-то вроде этого:
$article = Article::with('author')->get(1);
В этом случае первая статья (с идентификатором 1) будет загружена связанной с ней моделью Author
, и вы можете использовать
$article->author->name; // to access the name field from related/loaded author model
Таким образом, невозможно получить отношения магически без использования соответствующего метода для загрузки отношений, но как только вы загрузите связь (связанные модели), вы можете использовать что-то вроде этого, чтобы получить отношения:
$article = Article::with(['category', 'author'])->first();
$article->getRelations(); // get all the related models
$article->getRelation('author'); // to get only related author model
Чтобы преобразовать их в array
, вы можете использовать метод toArray()
, например:
dd($article->getRelations()->toArray()); // dump and die as array
Метод relationsToArray()
работает с моделью, которая загружается с помощью связанных моделей. Этот метод преобразует связанные модели в форму массива, где метод toArray()
преобразует все данные модели (с отношением) в массив, вот исходный код:
public function toArray()
{
$attributes = $this->attributesToArray();
return array_merge($attributes, $this->relationsToArray());
}
Он объединяет атрибуты модели и связанные атрибуты модели после преобразования в массив и возвращает его.