Php 如何使用Laravel 6将数组值推入数据库?

Php 如何使用Laravel 6将数组值推入数据库?,php,laravel,Php,Laravel,我想向数据库中的names列添加多个值。我在模型中设置了强制转换,使其成为一个数组 控制器 public function add() { $id = 1; $db = Article::find($id)->first(); $start = $db->names; $db->names = array_push($db->names,'value'); } 型号 class Article extends Model { protec

我想向数据库中的
names
列添加多个值。我在模型中设置了强制转换,使其成为一个数组

控制器

public function add() {
   $id = 1;
   $db = Article::find($id)->first();
   $start = $db->names;
   $db->names = array_push($db->names,'value');
}
型号

class Article extends Model
{
    protected $casts = [
        'names' => 'array'
    ];
}
这将返回一条错误消息
间接修改重载属性App\Article::$names无效


如何将值推送(或删除)到数据库中的数组中?

发生这种情况是因为$db->name不是数组,它是一个laravel雄辩的魔法属性

你也可以

array_push($start, 'newvalue');
$db->names = $start;
$db->save();
或者使用setter,laravel还提供了定义模型setter的“神奇”方法,如mutators

见:

我也会考虑,不使用数组推送,如果它只是一个平面数组

$originalArray = $db->names;
$originalArray[] = 'Additional Value';
$db->names = $originalArray;
$db->save();

也会起到同样的作用,而且可能更容易阅读。

我认为这更像是一个面向对象的概念。您需要为列创建setter和getter函数以正确修改它们。与此类似:嗨,谢谢你的回答。我尝试了第一件事,它似乎存储了数字“2”,而不是将其推送到数据库中现有的数组中。你知道这是为什么吗?是的,我实际上是根据你的样品工作的。但是array_push不会返回新数组,而是返回数组上的实际元素数。第一个参数是通过引用修改的:请参见如何改用array\u merge<代码>$db->names=array\u merge($db->names,['newValue'])@Arcesilas谢谢你,这个解决方案也很有效。如果你有PHP7.4
$db->names=[…$db->names,'newValue'],那就更妙了。