通过查找“ id”将数据插入关联

时间:2019-07-23 15:37:33

标签: php laravel

我正试图将数据插入相关表中,但是我不知道如何获取父表的ID以便插入到关系表中。有两个表wallet,然后是walletlogs,钱包日志与hasMany有关。现在,我需要在wallet和walletlogs中都插入数据,我成功地将数据插入了wallet,但是没有id却无法插入walletlogs。如何在插入数据的同时从钱包中查找ID,并使用该ID插入walletlogs。请注意,钱包与用户表有关。

The relation in wallet model: 

public function wallet_logs(){

    return $this->hasMany('App\Walletlog');
}

Inserting data: 

$wallet = Wallet::where('user_id', $id)->increment('wallet_balance',200); // 
this is how am inserting data into wallet.

如何在插入数据时从钱包中获取ID,以及如何将数据插入钱包日志中。

2 个答案:

答案 0 :(得分:2)

来自laravel文档:

  

[...] create方法接受一个属性数组,创建一个模型并将其插入数据库中。

laravel示例:

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

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

更新

您的问题:

$wallet = Wallet::where('user_id', $id)->first()->increment('wallet_balance',200);

//Since `->increments()` does not return a query builder instance, you can not chain your calls like `->increments->wallet_logs()`, and need to get the wallet again:
Wallet::where('user_id', $id)
    ->first()
    ->wallet_logs()->create([
        'field_name' => 'value'
    ]);

更新2

为避免第一个示例的两个查询,您可以执行以下操作:

$wallet = Wallet::where('user_id', $id)->first();
$wallet->increment(200);
$wallet->wallet_logs()->create([
    'field_name' => 'value'
]);

您可以详细了解here

希望有帮助。

答案 1 :(得分:0)

为什么不尝试运行选择查询以从相关表中获取ID,然后将其发布到变量中,然后执行此操作而不是获取