【问题标题】:eloquent specific $fillable for Model::create() and another $fillable for Model->update()雄辩的特定 $fillable 用于 Model::create() 和另一个 $fillable 用于 Model->update()
【发布时间】:2018-12-10 13:15:14
【问题描述】:

我需要一种仅在创建 Article 模型时设置 ArticleCategory 的方法,并且不会通过使用 $fillable 数组的更新过程进行更改。我需要牢记以下几点:

1- 我想通过批量分配来做到这一点 2- 我使用表单请求验证进行验证

那么是否有 $fillable 数组用于创建和一个用于更新?

谢谢...

【问题讨论】:

    标签: php laravel laravel-5.6 php-7.2


    【解决方案1】:

    fillable属性只有一个,所以你想要的默认是不可能的。

    但您可以使用 only 并检索您想要更新的输入:

    来自文档:

    如果您需要检索输入数据的子集,您可以使用 only 和 except 方法。这两种方法都接受一个数组 或动态参数列表:

    $input = $request->only('username', 'password');
    
    $input = $request->except(['credit_card']);
    

    在你的情况下,它会是这样的:

    public function update(UpdateArticleRequest $request, $id)
    {
        $article = Article::findOrFail($id);
        $article->update($request->only('title', 'name'));
    }
    

    【讨论】:

    • 谢谢亲爱的,我在 FormRequest 类中使用 rules() 方法也是如此。只将所需的列添加到规则数组中,laravel 只会忽略其他字段,但我认为有更好的方法将此模型相关的逻辑放入模型中
    【解决方案2】:

    您不能真正做到这一点,但您可以考虑以下替代方案:

    不要将ArticleCategory 放入您的$fillable 数组中。

    使用以下内容:

     $article = new Article($request->all());
     $article->ArticleCategory = $request->input('ArticleCategory');
     $article->save();
    

    通过这种方式,您可以在需要时明确设置文章类别,并防止它被大量分配。

    我认为这将是解决这个问题的明智方法,因为(从它的声音来看)ArticleCategory 通常应该受到保护。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-06
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 2015-07-04
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多