我有一对多的关系表。我想在数组而不是行中插入子表数据。
Mobile.php
protected $fillable = ['mobile_id', 'mobile_name'];
public function models() {
return $this->hasMany(Model::class, 'mobile_id');
}
Model.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
]);
但它也无效。
答案 0 :(得分:0)
您应该在将数据保存到数据库之前对其进行序列化。在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',
]
答案 1 :(得分:0)
我认为问题是你的架构表,因为你需要首先实现这个:
// Migrations
$table->json('model_name');
这样,您可以使用一个数组将多个model_name
保存在一行中。
答案 2 :(得分:0)
试试我已经部署的 100% 工作。
foreach($request->model_name as $item => $value)
$data[$value]=array(
'mobile_name'=>$request->mobile_name,
'model_name'=>$value,
);
Mobile::insert($data); // Eloquent approach