php 在laravel中插入关系

t5zmwmid  于 11个月前  发布在  PHP
关注(0)|答案(4)|浏览(65)

我在Laravel 5.3中遇到了一个问题,我看了文档,也搜索了网页,但没有找到任何东西。
我使用Laravel Relationships连接两个表。现在,我希望在用户提交表单后,数据同时插入到两个表中。这里的问题是第一个表是主表,比如“users”,第二个表“xyz”属于第一个表。表“xyz”包含连接两个表的“users_id”列。显然,“users_id”是“users”表的“id”列。
现在的问题是,我想插入的数据在“用户”表(这是很容易做到的)和“xyz”表在同一时间。该User::create()函数将创建用户数据很容易,它也是工作,但插入数据在“xyz”表我将需要“用户_id”列数据和ID将不会生成,直到用户创建ID列已自动增量属性激活。
代码:

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

ddrv8njm

ddrv8njm1#

插入相关表的一种方法是使用关系:

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

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

字符串
它将自动填充xyz表中的user_id

xkftehaa

xkftehaa2#

如果需要插入多个项目,请使用createMany或saveMany方法。
举例来说:

$post = App\Post::find(1);

$post->comments()->createMany([
    [
        'message' => 'A new comment.',
    ],
    [
        'message' => 'Another new comment.',
    ],
]);

字符串
在Laravel的官方文档中:
https://laravel.com/docs/5.6/eloquent-relationships#inserting-and-updating-related-models

gg0vcinb

gg0vcinb3#

长期关系

$account = App\Account::find(10);
 
$user->account()->associate($account);
 
$user->save();

字符串

xtfmy6hx

xtfmy6hx4#

你可以这样创建它们,而不是同时保存它们。

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

字符串

相关问题