php – 获取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方法的this定义,它似乎返回了模型关系的数组.它似乎使用了Eloquent模型的$this-> relations属性.但是,此方法返回一个空数组,而relations属性是一个空数组,尽管我的关系设置正确.

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

解决方法:

这是不可能的,因为关系仅在通过使用with(用于预先加载)或使用模型中定义的关系公共方法(例如,如果创建具有以下关系的Author模型)请求时加载

public function articles() {
    return $this->hasMany('Article');
}

当您调用此方法时:

$author = Author::find(1);
$author->articles; // <-- this will load related article models as a collection

另外,正如我所说,当你使用这样的东西时:

$article = Article::with('author')->get(1);

在这种情况下,第一篇文章(ID为1)将加载它的相关模型作者,您可以使用

$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

要将它们转换为数组,您可以使用toArray()方法,如:

dd($article->getRelations()->toArray()); // dump and die as array

relationsToArray()方法适用于加载了相关模型的模型.此方法将相关模型转换为数组形式,其中toArray()方法将模型的所有数据(带关系)转换为数组,这里是源代码:

public function toArray()
{
     $attributes = $this->attributesToArray();

     return array_merge($attributes, $this->relationsToArray());
}

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

原文地址:https://codeday.me/bug/20191004/1853698.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


laravel的dd函数不生效怎么办
看不懂laravel文档咋办
安装laravel框架出现command怎么办
Laravel开发API怎么使用事务
laravel怎么构建复杂查询条件
laravel如何实现防止被下载
为什么laravel比yii火
一些常见的Laravel定时任务不运行的问题
laravel用路由有什么好处
composer无法安装laravel怎么办
laravel现在还用吗
laravel怎么替换主键id
laravel的appurl有什么用
如何修改Laravel的报错输出形式
laravel怎么避免foreach查表
laravel怎样操作数据库
laravel怎么截取字符串
laravel 是国内的吗
laravel怎么设置请求头
浅析Laravel社区Redis组件报错的问题和解决方法