2016-11-07 72 views
1

我在Laravel 5.3中遇到了问题,我查看了文档并搜索了网页,但没有找到任何关于它的内容。在laravel中插入关系

我正在使用Laravel Relationships来连接两个表。现在我想要在用户提交表单后同时在两个表上插入数据。在这里捕获的是第一个表是主要的一个说“用户”,第二个“xyz”属于第一个表。表“xyz”包含连接两个表的“users_id”列。显然,“users_id”是“users”表的“id”列。

现在问题到了,我想要在“用户”表(这是很容易完成)和“xyz”表中同时插入数据。 User::create()函数将很容易地创建用户数据,并且它也在工作,但是为了将数据插入到“xyz”表中,我将需要“user_id”列数据,并且在创建用户之前不会生成ID,因为ID列具有Auto - 激活属性。

代码:

$user = new User; 
    $inputArry = array('data1' => $request['field1'], 
        'data2' => $request['field2'], 
        'data3' => $request['field3'], 
        ); 
    $user->create($inputArry); 
    $user->xyz()->create([ 
     'user_id' => $user->id, 
     'name' => $request['name'], 
     'about' => $request['desc'], 
     'tag' => $request['tag'], 
    ]); 

以上是我使用用于此目的的代码,但它给我一个错误。

错误:

QueryException in Connection.php line 761: 
    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'soft_id' cannot be null (SQL: insert into `xyz` (`user_id`, `name`, `about`, `tag`, `updated_at`, `created_at`) values (, John, I am John, dev, 2016-11-09 21:01:29, 2016-11-09 21:01:29)) 
+0

究竟是什么问题?这是非常标准的数据库的东西;如果没有首先保存父项目,则无法创建子项目记录。 '$ user = User :: create(...);''在你试图将信息保存在表'xyz'之前'必须被调用。 –

+0

作为user_id在第二个查询中使用users-table/insert查询中的“last insert id”http://stackoverflow.com/questions/27873777/how-to-get-last-insert-id-in-eloquent- orm-laravel '$ user = User :: create($ data); $ insertedId = $ user-> id;' –

+0

是的,我调用了'$ user = User :: create([...]);'然后我怎么才能将保存的用户ID添加到“xyz”表的“user_id” ? – secrethash

回答

2

一种方法是使用关系为:

$user = User::create($user_inputs); 

$xyz = $user->xyz()->create($xyz_inputs); 

它会自动填入表中的user_id

0

你可以像这样而不是保存他们在同一时间创建它们...插入相关表

$id = User::create($input_arr)->id; 
Xyz::create([ 
    'user_id' => $id, 
    ... 
]);