繁体   English   中英

Laravel - 将多个字段保存为数组而不是行

[英]Laravel - Save multiple fields as array instead of row

我有一对多的关系表。 我想在数组而不是行中插入子表数据。

手机版

protected $fillable = ['mobile_id', 'mobile_name'];

public function models() {
    return $this->hasMany(Model::class, 'mobile_id');
}

模型.php

protected $fillable = ['model_name', 'mobile_id'
    ];
public function model()
{
    return $this->belongsTo(Mobile::class, 'mobile_id');
}

看法

Mobile Name: <input type="text" name="mobile_name">

Models:

<input type="text" name="model_name[]">
<button class="add_model">Add Model</button>

控制器

public function create(Request $request, Mobile $mob){
  $mob= new Mobile;
  $mob->mobile_name = request('mobile_name');

  for($i=0; $i < count(request('model_name')); $i++){
     $models = new Model;
     $models->model_name = request('model_name')[$i];

     $mob->models()->save($models);
     }
 $mob->save();
}

它为插入的每个移动模型创建一个新行。 但我希望将这些模型插入到数组行中的单列model_name中。

我试过了

for($i=0; $i < count(request('model_name')); $i++){
  Size::create([
  'model_name' => request('model_name')[$i],
  'mobile_id' => $mob->id
  ]);

但它也不起作用。

您应该在将数据保存到数据库之前序列化数据。在 for 循环之外创建模型实例。这是工作代码。

   public function create(Request $request, Mobile $mob){
      $mob= new Mobile;
      $mob->mobile_name = $request('mobile_name');
      $models = new Model;
      $arr=[];
      for($i=0; $i < count($request('model_name')); $i++){
         array_push($arr, $request('model_name')[$i]);
         }
      serialize($arr);
      $models->model_name =$arr;
      $mob->models()->save($models);
     $mob->save();
    }

在model.php中,添加以下代码

protected $casts = [
      'model_name ' => 'array',
]

我认为问题在于您的架构表,因为您需要先实现这一点:

//  Migrations 
$table->json('model_name');

这样你就可以使用一个数组在一行中保留许多model_name

试试我已经部署的 100% 工作。

foreach($request->model_name as $item => $value)
$data[$value]=array(
    'mobile_name'=>$request->mobile_name,
    'model_name'=>$value,
    
);

Mobile::insert($data); // Eloquent approach

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM