【问题标题】:Can not save in database! ErrorException: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array无法保存在数据库中! ErrorException: preg_replace(): 参数不匹配,模式是字符串,而替换是数组
【发布时间】:2018-10-23 03:31:44
【问题描述】:

我有问题。我解决不了。对不起我的英语,我是法国人。 我有一个表格,我无法保存捕获的内容。 我的表单视图:

<div class="col-lg-12">
{!! Form::open(['route' => ['admin.newsletter.update', $newsletters['id']] ]) !!}
<input name="_method" value="POST" type="hidden">
<?php
    for($i=0; $i<=5; $i++){
        $current = $i+1;
        ?>
        <div class="col-lg-12">
            <div class="col-lg-11">
                <div class="form-group">
<div class="col-lg-2">
    {!! Form::label("newsletterpost[$i]['post_id']", 'Article n°' . $current) !!}
</div>
<div class="col-lg-10">
    <?php if($newsletters['newsletterpost']) { ?>
        <?php $post_id = $newsletters['newsletterpost'][$i]['post_id']; ?>
        {!! Form::select("newsletterpost[$i]['post_id']", $posts, $post_id, ['class' => 'form-control selectoronlect', 'data-id'=> $i]) !!}
        {!! Form::hidden("newsletterpost[$i]['id']", $newsletters['newsletterpost'][$i]['id'])!!}
    <?php } else { ?>
        {!! Form::select("newsletterpost[$i]['post_id']", $posts, '', ['class' => 'form-control selectoronlect', 'data-id'=> $i]) !!}
    <?php }
        ?>
        {!!  Form::hidden("newsletterpost[$i]['newsletter_id']", $newsletters['id']) !!}
</div>
                </div>
            </div>
            <div class="col-lg-1">
                <p style="text-align: center">
<a href="#" class="url_{{ $i }}" target="_blank"><i class="fa fa-file-text-o"></i></a>
                </p>
            </div>
        </div>
        <br /><br /><br />
        <?php
    }
?>
<br /><br /><br />
<div class="col-lg-12">
    <a href="#" class="btn btn-primary">Aperçu de la newsletter</a>
</div>
<br /><br /><br />
<div class="col-lg-12">
    <div class="form-group">
        <div class="col-lg-2">
            {!! Form::label('state', 'Etat de la newsletter') !!}
        </div>
        <div class="col-lg-10">
            <?php
            $state = $newsletters['state'];
            $etat = array(0 => "Brouillon", 1 => "Publier", 2 => "Déjà envoyé");
            ?>
            {!! Form::select('state', $etat, $state, ['class' => 'form-control']) !!}
        </div>
    </div>
    {!!  Form::hidden('id', $newsletters['id']) !!}
    {!! Form::submit('Valider', ['class' => "btn btn-primary"]) !!}
</div>
{!! Form::close() !!}
</div>
当我验证时,我收到错误:ErrorException: preg_replace(): Parameter mismatch, pattern is a string while replacement is an array

我的动作控制器:

<?php
    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request,  $id)
    {
        echo "<pre>";
        print_r($request->all());
        echo "</pre>";
        die();
        //don't save
        Newsletter::where('id', $id)->update($request->all());
        //redirect
    }
?>

结果示例:

Array
(
    [_token] => dTK7cguWBEF06BBC55RWpFwKOi6hYlBEHtuH42Gi
    [_method] => POST
    [newsletterpost] => Array
        (
            [0] => Array
                (
                    ['post_id'] => 30503
                    ['newsletter_id'] => 2
                )

            [1] => Array
                (
                    ['post_id'] => 30504
                    ['newsletter_id'] => 2
                )
            [2] => Array
                (
                    ['post_id'] => 30505
                    ['newsletter_id'] => 2
                )
            [3] => Array
                (
                    ['post_id'] => 30506
                    ['newsletter_id'] => 2
                )
            [4] => Array
                (
                    ['post_id'] => 30507
                    ['newsletter_id'] => 2
                )
            [5] => Array
                (
                    ['post_id'] => 30508
                    ['newsletter_id'] => 2
                )
        )
    [state] => 0
    [id] => 2
)

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    我了解“Newsletter”模型与“Post”模型有关。您想更新时事通讯的帖子吗?

    如果是真的,那么正确的做法是:

    $newsletter = Newsletter::find($id);
    $posts = collect($request->get('newsletterpost'))->pluck('post_id')->toArray();
    $newsletter->posts()->sync($posts);
    

    并且在你的 Newsletter 模型中必须有这个关系:

    public function posts()
    {
        return $this->belongsToMany(\App\Post::class);
    }
    

    如果您想更新时事通讯的帖子关系,这可以解决您的问题。

    【讨论】:

    • 我将在可以访问我的源代码后立即进行测试。我想保存时事通讯和时事通讯模型。 Newsletter 是一个包含各种信息(状态、作者...)的模型,newsletterpost 负责链接 newsletter 和 post 模型。感谢您的回复。
    • 现在我认为时事通讯只是一个数据透视表?或者是否存在任何其他信息而不是帖子和时事通讯?
    【解决方案2】:

    感谢您的重播。我有同样的错误,但我想我找到了我的问题。当我执行 print_r 时,我会在数组中得到一个数组:

        Array
        (
            [0] => Array
                (
                    ['post_id'] => 30503
                    ['newsletter_id'] => 2
                )
    
        )
    

    我的问题在于我的视图形式:

    {!! Form::select("posts[$i]['post_id']", $posts, $post_id, ['class' => 'form-control selectoronlect', 'data-id'=> $i]) !!}
    

    我继续调查。

    【讨论】:

      猜你喜欢
      • 2016-01-25
      • 2017-03-26
      • 1970-01-01
      • 2015-06-19
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多