类型错误:传递给BelongsToMany :: formatSyncList()的参数1必须是数组类型,给定null,调用

时间:2017-08-16 10:09:24

标签: laravel laravel-5

我上传表格,用户可以添加带标签的帖子。当我在输入字段中输入标签时,我发现了此错误

  

BelongsToMany.php第866行中的FatalThrowableError:

     

类型错误:传递给Illuminate \ Database \ Eloquent \ Relations \ BelongsToMany :: formatSyncList()的参数1必须是数组类型,给定null,在

中调用

这就是我在Tag模型中所拥有的

public function itemTags()
{
    return $this->belongsToMany('App\Item', 'item_tag');
}

在我的Item模型中

public function taggs()
{
    return $this->belongsToMany('App\Tag', 'item_tag');
}

我视野中的字段

<div class="form-group">
    {!! Form::label('inputTags', 'Tags', array('class'=> 'col-sm-2 control-label')) !!}
    {!! Form::text('tags', null, ['class'=>'form-control', 'id'=>'inputTags']) !!}         
</div>

和控制器

public function store( ItemRequest $request )
{

    $image = $request->file('image');
    $filename=null;

    if( $image && $image->isValid()){
        $extension = $image->getClientOriginalExtension();
        $uploadPath = public_path(). '/uploads';
        $filename = rand(111,999). '.'. $extension;
        $image->move($uploadPath, $filename);
    }

    $item = new Item;
    $item->title = $request['title'];
    $item->category_id = $request['category_id'];
    $item->description = $request['description'];
    $item->user_id = Auth::user()->id;        
    $item->url = $request['url'];
    $item->image = $filename;

    if($item->save()){
        if(!is_null($filename)) {
            $item_image = new Item_Images;
            $item_image->image = $filename;
            $item_image->item_id = $item->id;
            $item_image->published = 1;
            $item_image->save();
        }

        $request->session()->flash('alert-success','Item added successfully.');
    }else
        $request->session()->flash('alert-error','Can not add item now. Plese tyr again!!.');

    $item->taggs()->sync($request->tags);
    return redirect()->route('frontend.user.myitems');
}

错误在这一行

    $item->taggs()->sync($request->tags);

这里有什么问题?

3 个答案:

答案 0 :(得分:0)

您的标记值$request->tags请求可能为空,请尝试调用同步:

$syncTagData = array();
//Passing empty array if tag request is empty...
if(!empty($request->tags)){
    $syncTagData= $request->tags;
}

$item->taggs()->sync($syncTagData);

希望你好。

<强>更新
如果您的请求$request->tags不是类型数组,请尝试以下代码:

$syncTagData = array();
//Passing empty array if tag request is empty...
if(!empty($request->tags)){
  array_push($syncTagData, $request->tags);
}

答案 1 :(得分:0)

今天我在情节和特征之间的多对多关系中得到了相同的错误。 这背后的原因是用户没有选择功能,而null则传递给 sync()

$plot->featureset()->sync($request->features);

解决方案:

$feature_set = ($request->features) != null) ? $request->features : [];

$plot->featureset()->sync($feature_set);

此致

答案 2 :(得分:0)

尝试一下,该方法适用于我的项目。

    if (isset($request->tags)) {

        $intern->tags()->sync($request->input('tags'), false);

    } else {

        $intern->tags()->sync(array());

    }