gpt4 book ai didi

php - 将数组值插入数据库 laravel

转载 作者:可可西里 更新时间:2023-11-01 07:58:29 24 4
gpt4 key购买 nike

我有一个名为 namedescriptionfeatures 的表单属性,其中 features 是多个复选框就像

feature 1
feature 2
feature 2
feature 4

用户可以一次选择多个复选框。我有一个名为 product 的数据库表,如

-----------------------------------------
id name description features
-----------------------------------------

当用户选择多个复选框时,我需要将所有复选框值插入到功能列中。现在我可以像 echo 一样选择复选框值

 $feat = Input::get('features');
foreach ($feat as $key => $n){
echo $feat[$n];
}

但我需要将这些功能插入到数据库中,对于正常插入,我们会这样做:

$product = new Product;
$product->name = Input::get('name');
$product->description = Input::get('description');
$product->features = Input::get('features');
$product->save();

但是我应该如何修改上面的代码才能将数组值保存到数据库中呢?我正在尝试将值插入同一列,因为我不会根据功能查询它。

最佳答案

这很简单。如果您知道您不会查询这些特征,那么将它们存储为 Json 或序列化数组是完全没问题的。但是,如果您需要查询它们并且它们是您应用程序的关键方面,您应该将它们放在它们自己的表中。

我更喜欢以 Json 格式存储数组,因为它更易于阅读并且不特定于 PHP。 Laravel 为您提供了非常好的选择来完成这项工作。

首先,在迁移中将 features-products 表的字段声明为 json:

Schema::create('products', function (Blueprint $table) {
// ...
$table->json('features');
});

然后将您的Product-model 告诉automatically cast it当您通过简单地设置一个$casts-attribute 来访问它时到一个数组:

class Product extends Model
{
// ...
protected $casts = [
'features' => 'json'
];
}

就是这样。现在数组将存储为 Json,但是当您使用 $product->features 访问它时,您将得到一个数组。

为了让一切变得更简单,你应该设置一个 fillable attribute在您的产品型号上:

class Product extends Model
{
// ...
protected $fillable = ['name', 'description', 'features'];
}

这允许在您的 Controller (或您创建产品的任何地方)中执行类似的操作:

$product = Product::create(Input::all());

...而不是更新它并一一设置属性。

并且如上所述,请确保您不需要这些功能是可查询的,这意味着您不会遇到您试图获得仅具有特定功能或其他东西的某些产品的情况。但是如果你确实需要查找特征,你应该把它们放在它们自己的表中。否则这种方法就很好,因为它更方便。

关于php - 将数组值插入数据库 laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32453987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com