Php 在null上调用成员函数attach()

Php 在null上调用成员函数attach(),php,mysql,laravel,relationship,Php,Mysql,Laravel,Relationship,我想创建一个标记系统,但我有一个错误“调用成员函数attach()on null”。我有两张桌子,一人一人。关系是这样的: //in person public function tags(){ $this->belongsToMany('App\persontags'); } //in persontags public function person(){ $this->belongsToMany('App\person');

我想创建一个标记系统,但我有一个错误“调用成员函数attach()on null”。我有两张桌子,一人一人。关系是这样的:

//in person
public function tags(){
        $this->belongsToMany('App\persontags');
    }
//in persontags
    public function person(){
        $this->belongsToMany('App\person');
    }
<select class="js-example-responsive col-12" multiple="multiple" name="tags[]">
            @foreach($tags as $tag)
                <option value={{ $tag->id }}>{{ $tag->name }}</option>
            @endforeach
</select>
我还创建了表person\u persontags。在控制器中,我要使用attach方法:

$person->tags()->attach($request->tags);
但我有这个错误。 我的观点是这样的:

//in person
public function tags(){
        $this->belongsToMany('App\persontags');
    }
//in persontags
    public function person(){
        $this->belongsToMany('App\person');
    }
<select class="js-example-responsive col-12" multiple="multiple" name="tags[]">
            @foreach($tags as $tag)
                <option value={{ $tag->id }}>{{ $tag->name }}</option>
            @endforeach
</select>
@编辑2

dd资源($request->tags)


这是因为
$person
变量返回
null
。检查您的
$person
值,它是否为
null

您是否可以通过写入以下内容来回显
$request->tags
之前的
$attach()

dd($request->tags);
$person->tags()->attach($request->tags);
@编辑

@Konfus2234我认为可能导致错误的是表的名称,所以您可以这样指定表的名称:

public function tags(){
$this->belongsToMany('App\persontags', 'name_of_table');
}
public function person(){
$this->belongsToMany('App\person', 'name_of_table');
}

您没有从关系方法返回关系类型对象。要使其成为关系方法,它必须返回关系类型对象(HasOne、HasMany、BelongsTo等)

您没有返回任何内容,因此
void | null
,您应该从方法返回:

public function tags()
{
    return $this->belongsToMany('App\persontags');
    // `belongsToMany` returns an object
}

public function person()
{
    return $this->belongsToMany('App\person');
}

你能不能就他们自己的字符大小写指定文件名?