我无法找到在laravel中关联或保存模型时解释的位置仅在外键设置为可空时才起作用,否则会给我完整性约束违规:1452。我假设使外键为null这是一个不好的做法,大多数情况下,如果我必须处理一对多的关系。
实施例
$lugarCompra = Input::get('lugar_compra');
$lugarCompra = Lugares_compra::find($lugarCompra);
$tipoPago = Input::get('tipo_pago');
$tipoPago = Tipos_pago::find($tipoPago);
$origen = Input::get('origen');
$fecha_embarque = Input::get('fecha_embarque');
$fecha_embarque = date("Y-m-d", strtotime($fecha_embarque));
$hora_embarque = Input::get('hora_embarque');
$ordenDeCompra = Ordenes_compra::create(array(
'lugar_origen' => $origen,
'fecha_embarque' => $fecha_embarque,
'hora_embarque' => $hora_embarque,
));
$ordenDeCompra->save();
// THIS NOT WORKING, GIVES ME INTEGRITY CONSTRAINT VIOLATION.
$ordenDeCompra = $lugarCompra->ordenesCompra()->save($ordenDeCompra);
$ordenDeCompra = $tipoPago->ordenesCompra()->save($ordenDeCompra);
// THIS ALSO NOT WORKS, GIVES ME INTEGRITY CONSTRAINT...
$ordenDeCompra->lugar_compra()->associate($lugarCompra)->save();
$ordenDeCompra->tipo_pago()->associate($formaPago)->save();
是的,父表有数据,所以不是问题。仅当外键可以为空()时才有效,执行此操作的最佳方法是什么? Nullable对我来说似乎是一个黑客...... Tnx回复...
答案 0 :(得分:0)
我不认为在这种情况下使外键可以为空,但这取决于你的数据。
在我的项目中,我有一个模型User
和一个模型Client
。 User
可能是最多一个Client
的管理员,但他们也可以是不是管理员的普通用户。这是一对多关系,因此我将一个client_id外键添加到users表中。
client_id并不总是设置,对大多数用户来说实际上是空的。
我认为这与您的情况类似(由于代码中的语言,我无法确切地说出来)。如果您要表示可选,一对多关系,那么可以为空的外键是完全可以接受的表示。