关联或保存关系仅在Laravel中可以为空时才有效

时间:2014-09-29 16:51:25

标签: mysql laravel eloquent

我无法找到在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回复...

1 个答案:

答案 0 :(得分:0)

我不认为在这种情况下使外键可以为空,但这取决于你的数据。

在我的项目中,我有一个模型User和一个模型ClientUser可能是最多一个Client的管理员,但他们也可以是不是管理员的普通用户。这是一对多关系,因此我将一个client_id外键添加到users表中。

client_id并不总是设置,对大多数用户来说实际上是空的。

我认为这与您的情况类似(由于代码中的语言,我无法确切地说出来)。如果您要表示可选,一对多关系,那么可以为空的外键是完全可以接受的表示。