突变体和关系

Posted

技术标签:

【中文标题】突变体和关系【英文标题】:Mutator and relations 【发布时间】:2016-08-22 00:59:56 【问题描述】:

使用 Laravel 5.2,我在团队模型中设置了一个 mutator:

public function getNameAttribute($value)

    if ($this->exists) 
        return !empty($value) ? $value : $this->organization()->first()->name;
    
    return null;

与组织模型的关系:

public function organization()

    return $this->belongsToMany('App\Models\Organization')->withTimestamps();

$team->name 为空时,我尝试获取$this->organization()->first()->name 但是.. 发生错误:

试图获取非对象的属性

两个小时后,我还没有发现问题

编辑:

Schema::table('organization_team', function (Blueprint $table) 
            $table->foreign('organization_id')
                ->references('id')
                ->on('organizations')
                ->onUpdate('cascade')
                ->onDelete('cascade');

            $table->foreign('team_id')
                ->references('id')
                ->on('teams')
                ->onUpdate('cascade')
                ->onDelete('cascade');
        );

【问题讨论】:

我找到了另一个话题。我认为我有同样的问题。 link 但我不明白他是如何解决问题的。 【参考方案1】:

$this->organization()->first() 必须在您的应用程序中返回 null。

所以检查你的数据库并添加一些关系数据。

您可以找到这样的组织名称。

$this->organization->first(function ($item) 
    return ! empty($item->name);
)->name;

【讨论】:

当我对此进行 dd() 时,我得到了很好的结果,但没有,仍然是同样的错误。【参考方案2】:

很简单,就这样吧:

 public function getNameAttribute($value)
    
        if ($this->exists) 
            return !empty($value) ? $value : $this->organization
                                                   ->first()->name;
        
        return null;
    

【讨论】:

您能提供完整的错误信息吗?哪一行抛出该错误? link Team.php 中哪一行是 41? 你确定这个团队有与之相关的组织吗? 是的,我已经编辑了我的第一篇文章。但是当我在 $this->organisation->first()->name 上执行 var_dump 时,我得到了我想要的值,但是当我尝试获取 $team->name 时,发生了错误。真的很奇怪。

以上是关于突变体和关系的主要内容,如果未能解决你的问题,请参考以下文章

突变以在 AWS AppSync 上创建关系

GraphQL,1-1 关系突变

如何在graphql突变中设置多对多关系?

具有外键关系的对象的石墨烯中的 GraphQL 突变

无法使用我的突变在 Hasura / GraphQL 中插入数组关系

graphql/graphcool:如何编写一个连接一对一和一对多关系的突变