我是Laravel新手,遇到了这个问题: 我有2个表,柏拉图和配料,它们之间存在多对多的关系,为此,我使用了第三个表,称为compositiones_platos。
为了保存多对多关系,我尝试使用以下方法:
$ platos-> ingredientes()-> attach($ input ['ingredientes']);
但是会出现以下错误:
SQLSTATE [23000]:违反完整性约束:1062项“ PRIMARY”的重复项“ 151-3”(SQL:插入到ingredientes_platos
(platos_id
,ingredientes_id
,{{ 1}})值(151、3,))
稍微看一下文档,我可以使用同步而不是附加来解决,但这不能解决我的问题,因为除了保存关系的ID之外,我还需要在数据透视表中保存其他属性。
请务必注意,如果我尝试将这些数据保存到Ingredients_platos以外的其他表中,那么无论使用哪种方法,我都不会遇到此问题,并且可以正确保存数据。
感谢您的关注,希望您能对我有所帮助。
这是三个表的模型:
Table Platos:
norma_bruta
}
表成分:
public $ table ='ingredientes';
public $table = 'platos';
protected $dates = ['deleted_at'];
public $fillable = [
'Grupo',
'Nombre',
'Procedimiento',
'Cantidad',
'Unidad',
'Precio'
];
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
'Grupo' => 'integer',
'Nombre' => 'string',
'Procedimiento' => 'string',
'Cantidad' => 'integer',
'Unidad' => 'integer',
'Precio' => 'double'
];
/**
* Validation rules
*
* @var array
*/
public static $rules = [
'Grupo' => 'required',
'Nombre' => 'required'
];
public function ingredientes()
{
return $this->belongsToMany(Ingredientes::class);
}
public function grupo_platos()
{
return $this->hasOne('App\Models\Grupo_Platos', 'id', 'Grupo');
}
}
表的成分表:
protected $dates = ['deleted_at'];
public $fillable = [
'Grupo',
'Nombre',
'Descripcion',
'Kcal',
'Proteinas',
'Grasas',
'Unidad',
'Precio'
];
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
'Grupo' => 'integer',
'Nombre' => 'string',
'Descripcion' => 'string',
'Kcal' => 'double',
'Proteinas' => 'double',
'Grasas' => 'double',
'Unidad' => 'integer',
'Precio' => 'double'
];
/**
* Validation rules
*
* @var array
*/
public static $rules = [
'Nombre' => 'required'
];
public function platos()
{
return $this->belongsToMany(Platos::class);
}
}
Platos Controller:
public $table = 'ingredientes_platos';
public $fillable = [
'platos_id',
'ingredientes_id',
'norma_bruta',
'norma_neta',
'unidad_id'
];
public $timestamps = false;
答案 0 :(得分:0)
如果您需要一种类型多次“属于”另一种类型,反之亦然,那么通用的多对多关系可能不适合您尝试做的事情。不仅由于主键约束,还因为您将遇到为该关系返回多行结果的情况,而多对多关系将不知道如何汇总或分组这些关系。您可能想提出第三种Model
,类似于“属性”,它与其他两种模型有关系并可以帮助您实现目标。
答案 1 :(得分:0)
非常感谢,我的问题已经解决。碰巧,除了Laravel,我还使用InfyOM,当我尝试将记录手动添加到数据透视表时,这造成了冲突,因为该行已经负责将注册表添加到数据透视表: = $ this-> dishRepository-> create($ input);
答案 2 :(得分:0)
// Many to Many relationship in category Model to Post model coding here
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
public function posts()
{
return $this->belongsToMany('App\Post')->withTimestamps();
}
}
// Many to Many relationship in Post Model to Category model coding here
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
public function categories(){
return $this->belongsToMany('App\Category')->withTimestamps();
}
}