Laravel eloquent 插入关系数据
Laravel eloquent insert data with relationship
我有两个模型:trainers 和 trainerClubs。我有 json 数组。每个 json 数组都有另一个 array.When 一个 json 来找我,我想将它们同时添加到关系模型中。
例如; Trainer::insert($request->all());
我的json例子;
[
{
"identity_no": "111222333",
"first_name": "john",
"last_name": "doe",
"TrainerClubs": [
{
"club_id": 1,
"work_type": 1
},
{
"club_id": 2,
"work_type": 1
}
]
},
{
"identity_no": "444555666",
"first_name": "jane",
"last_name": "doe",
"TrainerClubs": [
{
"club_id": 1,
"work_type": 3
},
{
"club_id": 13,
"work_type": 3
}
]
}
]
和我的模特;
class Trainer extends Model
{
public $timestamps = true;
protected $guarded = ['id'];
public function TrainerClubs()
{
return $this->hasMany('App\Modules\Trainer\Models\TrainerClub', 'trainer_id');
}
}
class TrainerClub extends Model
{
protected $guarded = ['id','created_at','updated_at'];
public function Trainer()
{
return $this->belongsTo('App\Modules\Trainer\Models\Trainer');
}
}
我当前的工作代码;
public function create(array $data)
{
foreach ($data as $trainer) {
$crrTrainer = (array)$trainer;
$clubs = array_pop($crrTrainer);
$addedTrainer = Trainer::create($crrTrainer);
foreach ($clubs as $trainerClub) {
$addedTrainer->TrainerClubs()->create($trainerClub);
}
}
return true;
}
感谢帮助
简而言之,您不能同时保存两个模型。在您的情况下,您必须首先创建培训师:
$addedTrainer = Trainer::create($crrTrainer);
稍后插入球杆。您可以做的不同是同时创建所有俱乐部,而不必使用 createMany
:
循环遍历它们
$addedTrainer->TrainerClubs()->createMany($clubs);
我有两个模型:trainers 和 trainerClubs。我有 json 数组。每个 json 数组都有另一个 array.When 一个 json 来找我,我想将它们同时添加到关系模型中。 例如; Trainer::insert($request->all());
我的json例子;
[
{
"identity_no": "111222333",
"first_name": "john",
"last_name": "doe",
"TrainerClubs": [
{
"club_id": 1,
"work_type": 1
},
{
"club_id": 2,
"work_type": 1
}
]
},
{
"identity_no": "444555666",
"first_name": "jane",
"last_name": "doe",
"TrainerClubs": [
{
"club_id": 1,
"work_type": 3
},
{
"club_id": 13,
"work_type": 3
}
]
}
]
和我的模特;
class Trainer extends Model
{
public $timestamps = true;
protected $guarded = ['id'];
public function TrainerClubs()
{
return $this->hasMany('App\Modules\Trainer\Models\TrainerClub', 'trainer_id');
}
}
class TrainerClub extends Model
{
protected $guarded = ['id','created_at','updated_at'];
public function Trainer()
{
return $this->belongsTo('App\Modules\Trainer\Models\Trainer');
}
}
我当前的工作代码;
public function create(array $data)
{
foreach ($data as $trainer) {
$crrTrainer = (array)$trainer;
$clubs = array_pop($crrTrainer);
$addedTrainer = Trainer::create($crrTrainer);
foreach ($clubs as $trainerClub) {
$addedTrainer->TrainerClubs()->create($trainerClub);
}
}
return true;
}
感谢帮助
简而言之,您不能同时保存两个模型。在您的情况下,您必须首先创建培训师:
$addedTrainer = Trainer::create($crrTrainer);
稍后插入球杆。您可以做的不同是同时创建所有俱乐部,而不必使用 createMany
:
$addedTrainer->TrainerClubs()->createMany($clubs);