获取 Eloquent 模型的关系数组

新手上路,请多包涵

我正在尝试获取所有模型关联的数组。我有以下模型:

 class Article extends Eloquent
{
    protected $guarded = array();

    public static $rules = array();

    public function author()
    {
        return $this->belongsTo('Author');
    }

    public function category()
    {
        return $this->belongsTo('Category');
    }
}

从这个模型中,我试图得到它的以下关系数组:

 array(
    'author',
    'category'
)

我正在寻找一种方法来自动从模型中拉出这个数组。

我在 Eloquent 模型上找到 RelationsToArray 方法的定义,它似乎返回了模型关系的数组。它似乎使用了 Eloquent 模型的 $this->relations 属性。但是,此方法返回一个空数组,并且关系属性是一个空数组,尽管我的关系设置正确。

如果不存储模型关系,$this->relations 用于什么?有什么方法可以自动获取模型关系的数组吗?

原文由 tprsn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 595
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);

在这种情况下,第一篇文章(id为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());
}

它在转换为数组后合并模型属性及其相关模型的属性,然后返回它。

原文由 The Alpha 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题