如何将数据存储到存在行

时间:2019-04-05 07:28:36

标签: php laravel

我写了一些代码,用于在插入新数据时将预订数据插入到数据库中,这将创建新行,因此我得到的是重复数据,因此,如果schedules_id等于存在,则需要存储数据schedules_id将座位数据存储到该表中数组格式,这是我的方法。

$booking = new Bookings();
        $booking->users_id = 4;
        $booking->schedules_id = $schedules_id;
        $booking->buses_id = $buses_id;
        $booking->routes_id = $routes_id;
        $booking->seat = implode(',', $seat);
        $booking->price = $request->price;
        $booking->profile = 'pending';

3 个答案:

答案 0 :(得分:0)

尝试

假设Bookings是模型

$matchThese = ['schedules_id' => $schedules_id];

Bookings::updateOrCreate($matchThese,[
    'seat'  => implode(',', $seat)
]);

$data = $request->all();

$data['seat'] = implode(',', $seat);

$matchThese = ['schedules_id' => $schedules_id];

Bookings::updateOrCreate($matchThese, $data);

确保您在“预订”模型的$fillable中添加了列

您可以在模型中进行投射

protected $casts    = [
        'seat'           =>  'array',
    ];

如果您使用数组转换,则$data['seat']应该是数组

答案 1 :(得分:0)

您可以在模型上使用updateOrCreate方法,因此请尝试以下方法:

$booking = Bookings::updateOrCreate(
    ['schedules_id' => $schedules_id, 'users_id' => 4 ], // match the row based on this array
    [ // update this columns
        'buses_id' => $buses_id,
        'routes_id' => $routes_id,
        'seat' => json_encode($seat),
        'price' => $request->price,
        'profile' => 'pending',
    ]

);

答案 2 :(得分:0)

currentUserId

您可以使用此firstORcreate laravel方法。此堆栈溢出页面上提供了有关其用法的更多说明。

First Or Create

但是,如果要将数据存储为数组,则可以在数据库中为数据创建text或json字段,并使用有效的序列化来处理它。 https://laravel.com/docs/5.8/eloquent-serialization

另一个堆栈溢出示例,回答了有关将数据存储在json中的问题 Laravel : How to store json format data in database?