首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将key-value添加到Laravel结果对象/集合

将key-value添加到Laravel结果对象/集合
EN

Stack Overflow用户
提问于 2020-12-22 09:35:58
回答 2查看 89关注 0票数 0

对Laravel来说是新手。拥有看起来不应该是问题的东西,但却引起了头疼。

我尝试在返回的结果对象/集合中插入一个键值对(bookingRef),这样结果将是:

代码语言:javascript
复制
[{"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这样的方法,它们会在对象返回后插入键值,但这不是我所需要的。

这是我的控制器:

代码语言:javascript
复制
<?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');
}
}
EN

回答 2

Stack Overflow用户

发布于 2020-12-22 10:05:23

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

代码语言:javascript
复制
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表的模型和Booking的关系设置,这会更方便一些。

票数 0
EN

Stack Overflow用户

发布于 2020-12-22 16:12:09

我设法解决了这个问题,这要归功于拉格BOX提出的使用模型的建议:

代码语言:javascript
复制
   <?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->new_property = value不起作用的原因。然而,第一个()方法似乎返回一个对象,这就是为什么它会返回。看起来我有一些关于模型和收藏的资料要读。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65402193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档