jrdavidson's avatar

Returning Var From DB Transaction

I'm asking to find out if this is correct way I should be returning the property inside of the DB::transaction closure as well ask if there are any suggestions on how to structure these calls in the controller.

<?php

namespace App\Http\Controllers;

use DB;
use App\Models\Customer;
use App\Models\Property;
use Illuminate\Http\Request;
use App\Jobs\ProcessPropertyMainPhoto;

class PropertiesController extends Controller
{
    /**
     * Store a newly created property for a business unit..
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function store(Request $request)
    {
        $this->authorize('create', Property::class);

        $property = DB::transaction(function () use ($request) {
            $customer = Customer::create([
                'first_name' => $request->customer['first_name'],
                'last_name' => $request->customer['last_name'],
                'email' => $request->customer['email'],
                'home_phone' => $request->customer['home_phone'],
                'mobile_phone' => $request->customer['mobile_phone'],
            ]);

            $customer->address()->create([
                'address1' => $request->customer['address1'],
                'address2' => $request->customer['address2'],
                'city' => $request->customer['city'],
                'state' => $request->customer['state'],
                'zip' => $request->customer['zip'],
            ]);

            $property = auth()->user()->businessUnit->properties()->create([
                'appointment_date' => $request->appointment_date,
                'notes' => $request->notes,
                'office_phone' => $request->office_phone,
                'creator_id' => auth()->user()->id,
                'customer_id' => $customer->id,
            ]);

            $property->address()->create([
                'address1' => $request->address1,
                'address2' => $request->address2,
                'city' => $request->city,
                'state' => $request->state,
                'zip' => $request->zip,
            ]);

            ProcessPropertyMainPhoto::dispatch($property);

            return $property;
        });

        return response()->json(['property' => $property, 'status' => 'success'], Response::HTTP_CREATED);
    }
}

0 likes
0 replies

Please or to participate in this conversation.