变异和关系

时间:2016-08-22 00:59:56

标签: laravel orm laravel-5 model

使用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');
        });

3 个答案:

答案 0 :(得分:0)

这很简单,就这样做:

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

答案 1 :(得分:0)

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

请检查您的数据库并添加一些关系数据。

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

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

答案 2 :(得分:0)

public function organization()
{
    return $this->belongsToMany('App\Models\Organization')->withDefault(new Organization);
}