向Laravel结果对象/集合添加键值

tv6aics1  于 2023-05-30  发布在  其他
关注(0)|答案(3)|浏览(122)

Laravel的新功能有什么似乎应该是一个非问题,但正在引起头痛。
我尝试在返回的结果对象/集合中插入一个键值对(bookingRef),结果如下:

[{"class_id":7,"class_name":"beginner","class_slots_avail":100,"class_slots_booked":53,"class_date":"2020-12-07 21:47:23","class_time":"09:25:00","class_reg_price":350, bookingRef: 127}]

我尝试过push、put和merge等方法,它们会在返回的对象之后插入键值,但这不是我所需要的。
这是我的控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Booking;

use App\Http\Controllers\Auth;

use Illuminate\Support\Facades\Mail;

use DB;

class BookingsController extends Controller
{
    //
    function store(Request $request) {

        $id = $request->input('class');
        
        if(DB::table('classes')->where('class_id', '=', $id)->exists()) {

            if(DB::table('classes')->where('class_id', '=', $id)->value('class_slots_booked') 
            < DB::table('classes')->where('class_id', '=', $id)->value('class_slots_avail')) {
            
                $booking = new Booking();
                
                $booking->class_id = $id;
                $booking->user_id = \Auth::id();
                $booking->save();

                DB::table('classes')->where('class_id', '=', $id)->increment('class_slots_booked', 1);

                if($booking) {

                    $confBook = DB::table('classes')->where('class_id', '=', $id)->get();

                    $confBook->bookingRef = $booking->id;

                    \error_log($confBook);
                }
               
            }
            else return('CLASS FULLY BOOOOKED');
    }
    else return('CLASS NOT Available');
}
}
i34xakig

i34xakig1#

您可以减少查询,并通过一些调整将这些额外的数据放在适当的位置:

function store(Request $request)
{
    $id = $rquest->input('class');

    $class = DB::table('classes')->where('class_id', $id)->first();

    if ($class) {
        if ($class->class_slots_booked < $class->class_slots_avail) {
            $booking = new Booking();
            $booking->class_id = $id;
            $booking->user_id = $request->auth()->id;

            if ($booking->save()) {
                // adding the extra data
                $class->bookingRef = $booking->id;

                DB::table('classes')->where('class_id', $id)
                    ->increment('class_slots_booked', 1);

                $class->class_slots_booked++;

                return view('view-booking', [
                    'bookings' => collect($class),
                ]);
            }
            // booking did not save
        }
        // unavailable
    }
    // class not found
}

如果为classes表设置一个Model,这会更方便一点,同时为Booking设置一个关系也会更好。

mcdcgff0

mcdcgff02#

我设法解决了这个问题,这要归功于Lagbox使用模型的建议:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Booking;
use App\Models\Classes;

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;

class BookingsController extends Controller
{
    //
    function store(Request $request) {

        $id = $request->input('class');
        
        $class = Classes::where('class_id', $id)->first();

        if($class) {

            if($class->class_slots_booked < $class->class_slots_avail) {

                 $booking = new Booking();
                
                 $booking->class_id = $id;
                 $booking->user_id = Auth::id();

                 if($booking->save()){

                    $class->where('class_id', $id)->increment('class_slots_booked');
                    $class->bookingRef = $booking->id;

                    return view('view-booking', ['bookings' => $class]);

                 }              
            }
            else return('Class Fully Booked');           

        }
        else return('Class Not Available');

    }
};

在我看来,get()方法返回一个包含object的数组,这就是为什么object->new_property = value不起作用的原因。然而,第一个()方法似乎返回一个对象,这就是为什么它会这样。看来我得好好阅读一下模型和收藏品了

dgtucam1

dgtucam13#

在本例中,从集合[1,2,3]开始。我们使用map方法为集合中的每一项加1。然后,我们使用push方法向集合中添加一个新值4。最后,我们使用all方法来检索集合的底层数组表示。

$collection = collect([1, 2, 3]);

$modifiedCollection = $collection->map(function ($item) {
    // Add 1 to each item in the collection
    return $item + 1;
});

$modifiedCollection->push(4); // Add a new value to the collection

dd($modifiedCollection->all());

输出结果为:

[2, 3, 4, 4]

相关问题