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'],那就更妙了。