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

我想创建一个标签系统,但我有一个错误“调用成员函数 attach() on null”。我有一个 2 表 - 人和 persontags。关系如下所示:


//in person

public function tags(){

        $this->belongsToMany('App\persontags');

    }

//in persontags

    public function person(){

        $this->belongsToMany('App\person');

    }

我也创建了表 person_persontags。在控制器中我想使用附加方法:


$person->tags()->attach($request->tags);

但我有这个错误。附言。我的观点是这样的:


<select class="js-example-responsive col-12" multiple="multiple" name="tags[]">

            @foreach($tags as $tag)

                <option value={{ $tag->id }}>{{ $tag->name }}</option>

            @endforeach

</select>

我该如何解决我的问题?


@Edit $person var 不为空,因为我创建了一个新人:


$person = person::create([

'name' => $request->name,

//...

]);

$person->tags()->attach($request->tags);

@编辑2


dd($request->tags) 的结果

http://img2.mukewang.com/641fe5390001291e01650065.jpg

米琪卡哇伊
浏览 78回答 3
3回答

森栏

您没有从关系方法返回关系类型对象。要成为关系方法,它必须返回关系类型对象(HasOne、HasMany、BelongsTo 等)。你没有返回任何东西void|null,你应该从方法返回:public function tags(){&nbsp; &nbsp; return $this->belongsToMany('App\persontags');&nbsp; &nbsp; // `belongsToMany` returns an object}public function person(){&nbsp; &nbsp; return $this->belongsToMany('App\person');}

暮色呼如

你能通过写这个回应$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');}

弑天下

这是因为$person变量是 return&nbsp;null。检查你的$person价值,是null不是?
打开App,查看更多内容
随时随地看视频慕课网APP