【问题标题】:Call to a member function attach() on null在 null 上调用成员函数 attach()
【发布时间】:2020-09-01 19:46:04
【问题描述】:

我想制作一个标签系统字节我有一个错误“调用 null 上的成员函数 attach()”。我有一个 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);

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

<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 var 不为空,因为我创建了一个新人:

$person = person::create([
'name' => $request->name,
//...
]);
$person->tags()->attach($request->tags);

@Edit2

dd($request->tags)的结果

【问题讨论】:

  • 你能根据自己的字符大小写指定文件名吗?

标签: php mysql laravel relationship


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你能在attach()之前回显$request-&gt;tags吗?写这个:

    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】:

      您没有从关系方法中返回关系类型对象。要使其成为关系方法,它必须返回一个关系类型对象(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');
      }
      

      【讨论】:

        猜你喜欢
        • 2020-09-02
        • 2021-05-23
        • 2018-05-27
        • 2017-08-09
        • 2020-03-10
        • 2017-09-24
        • 2018-02-06
        • 2018-09-29
        • 2018-08-04
        相关资源
        最近更新 更多