我想创建一个标签系统,但我有一个错误“调用成员函数 attach() on null”。我有一个 2 表 - 人和 persontags。关系如下所示://in personpublic 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);@编辑2dd($request->tags) 的结果
3 回答
森栏
TA贡献1810条经验 获得超5个赞
您没有从关系方法返回关系类型对象。要成为关系方法,它必须返回关系类型对象(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');
}
暮色呼如
TA贡献1853条经验 获得超9个赞
你能通过写这个回应$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');
}
- 3 回答
- 0 关注
- 104 浏览
添加回答
举报
0/150
提交
取消