带有关系和插入的Laravel表

问题描述 投票:0回答:1

我有4张桌子

  • 客户:带有客户数据。该表有很多(退款)
  • 退款:带有各种要求的数据。该表属于(客户)和属于(服务)
  • 服务:带有服务列表。该表属于ToMany(退款)
  • 退款服务:退款和服务的过渡表

我有一个必须在正确的表中插入数据的表格。

public function storeRefunds(RefundsPost $request){

    DB::beginTransaction();
        $customers = Customers::create($request->all());

        $refunds = $customers->refunds()->create([
            'date_ref' => request('date_ref'),
            'status_ref' => request('stato'),
        ]);

        $tipo = $request->input('tipo', []);
        $importo = $request->input('importo', []);

        $refunds = Refunds::create($request->all());
        for ($i=0; $i < count($tipo); $i++) {
            if ($tipo[$i] != '') {

                $refunds->services()->attach($tipo[$i], [
                'services_id' => $tipo[$i],
                'services_amount' => $importo[$i]
                ]);
            }
        }

        return redirect("/");

}

使用此代码,我可以将所有数据插入正确的表中,但是在退款表中找不到ID连接。在退款表中创建了两个不同的ID。未在“退款”表中创建的第二个ID,该ID未连接到任何客户(0),但连接到所选的服务列表。我能怎么做?Thx

laravel eloquent relationship
1个回答
0
投票

您需要调试代码。第一个Refund在此行$refunds = $customers->refunds()->create中创建,它属于Customer,第二个Refund在这里创建:$refunds = Refunds::create($request->all());,它与任何Customer不相关,但是与Service相关(您可以在for循环中)。顺便说一句,您的tipo输入不是多个(如果您希望它可以是一个以上的值,则应该与[]一起使用),并且在这种求法中for循环是毫无意义的。

删除Refunds::create方法之一,将数据带到预期的视图并使用createMany()方法。

Laravel文档中的更多信息:https://laravel.com/docs/7.x/eloquent-relationships#the-create-method

© www.soinside.com 2019 - 2024. All rights reserved.