Laravel 6 : 多态关系保存的重复数据库条目
Laravel 6 : Duplicate database entry on polymorphisme relation save
我尝试在我的数据库中保存变形关系,但是当我尝试保存它时,我在每个 table 中都有两个条目用于关系。
这是我的客户class
class Client extends Model
{
protected $guarded = [];
public function clientelle(){
return $this->morphTo();
}
}
我的朋友class
class Particulier extends Model
{
protected $guarded = [];
public function client(){
return $this->morphOne(Client::class,'clientelle');
}
}
所以当我尝试那样保存时:
$particulier = new Particulier();
$particulier->nom = $request->nom;
$particulier->prenom = $request->prenom;
$particulier->save();
$particulier->client()->create(['telephone'=>$request->telephone,'adresse'=>$request->adresse,'email'=>$request->email]);
我的数据库保存了两条相同的记录。这是我的问题。
所以我尝试了不同的方法来避免它,但我每次都出错
- 删除
$particulier->save();
但 SQL 错误 ID 不存在
- 将 create([...]) 替换为 save([...]) 或 sync([...]) 但不起作用
提前致谢
所以我终于找到了一个最糟糕的解决方案...
在你的控制器中添加 int var 并将其初始化为 0 :
Private $checkDouble=0;
在你想要保存关系的地方创建 if 块并像这样保存所有模型:
if($this->checkDouble==0) {
$this->checkDouble = $this->checkDouble + 1; //Increase your var value
$particulier = Particulier::create(['nom' => $request->nom, 'prenom' => $request->prenom]);
$particulier->client()->create(['telephone' => $request->telephone, 'adresse' => $request->adresse, 'email' => $request->email]);
}
不再有重复数据
我知道这是最糟糕的解决方案,但我没有看到任何最佳解决方案^^
我尝试在我的数据库中保存变形关系,但是当我尝试保存它时,我在每个 table 中都有两个条目用于关系。
这是我的客户class
class Client extends Model
{
protected $guarded = [];
public function clientelle(){
return $this->morphTo();
}
}
我的朋友class
class Particulier extends Model
{
protected $guarded = [];
public function client(){
return $this->morphOne(Client::class,'clientelle');
}
}
所以当我尝试那样保存时:
$particulier = new Particulier();
$particulier->nom = $request->nom;
$particulier->prenom = $request->prenom;
$particulier->save();
$particulier->client()->create(['telephone'=>$request->telephone,'adresse'=>$request->adresse,'email'=>$request->email]);
我的数据库保存了两条相同的记录。这是我的问题。
所以我尝试了不同的方法来避免它,但我每次都出错
- 删除
$particulier->save();
但 SQL 错误 ID 不存在 - 将 create([...]) 替换为 save([...]) 或 sync([...]) 但不起作用
提前致谢
所以我终于找到了一个最糟糕的解决方案...
在你的控制器中添加 int var 并将其初始化为 0 :
Private $checkDouble=0;
在你想要保存关系的地方创建 if 块并像这样保存所有模型:
if($this->checkDouble==0) {
$this->checkDouble = $this->checkDouble + 1; //Increase your var value
$particulier = Particulier::create(['nom' => $request->nom, 'prenom' => $request->prenom]);
$particulier->client()->create(['telephone' => $request->telephone, 'adresse' => $request->adresse, 'email' => $request->email]);
}
不再有重复数据
我知道这是最糟糕的解决方案,但我没有看到任何最佳解决方案^^