2014-09-29 57 views
0

我无法找到在laravel中关联或保存模型时解释的位置仅在外键设置为可为空时才起作用,否则会给我完整性约束违规:1452。我假设把一个外键作为一个不好的习惯,如果我必须处理一对多的关系,那么最好的做法是把它作为一个坏习惯。关联或保存关系仅在Laravel可空时工作

$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(); 

是的,父表中有数据,所以那不是问题。只有在外键可空()时才有效,那么最好的方法是什么?可空对我来说似乎是一个破解... Tnx的回复...

+0

显示错误。不,可空的FK不是一个坏习惯,取决于业务需求。你的问题不是可空字段或不是,但传递给INSERT语句的数据错误 - 很可能你不想在那里传递null,但是你做错了。 – 2014-09-29 18:04:50

回答

0

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

在我的项目中,我有一个型号User和一个型号Client。 A User可能最多只有一个管理员Client,但他们也可以是普通用户,他不是管理员。这是一对多的关系,所以我在client表中添加一个client_id外键。

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

我认为这与你的情况很相似(因为代码中的语言,我无法准确判断)。如果您代表可选一对多关系,则可以为空的外键是完全可接受的表示。

+0

thanx答复...我做研究,是的它毕竟不是一个糟糕的做法,因为你说这取决于逻辑...我的问题是关于在laravel中创建关系的过程... – 2014-09-30 15:13:28