为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
米琪卡哇伊 2023-03-26 14:24:24
我想创建一个标签系统,但我有一个错误“调用成员函数 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');

}


查看完整回答
反对 回复 2023-03-26
?
暮色呼如

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');

}


查看完整回答
反对 回复 2023-03-26
?
弑天下

TA贡献1818条经验 获得超7个赞

这是因为$person变量是 return null。检查你的$person价值,是null不是?



查看完整回答
反对 回复 2023-03-26
  • 3 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信