12<?php34// Good5$result = $object instanceof Model6 ? $object->name7 : 'A default value';89$name = $isFoo ? 'foo' : 'bar';1011// Bad12$result = $object instanceof Model ?13 $object->name :14 'A default value';15
12<?php34// good5Route::get('/', 'HomeController@index');6Route::get('open-source', 'OpenSourceController@index');78//bad9Route::get('', 'HomeController@index');10Route::get('/open-source', 'OpenSourceController@index');11
12php artisan make:controller ProductsController --resource3php artisan make:controller ProductsController --api4
Kode yang berulang di controller dapat dipecah menjadi sebuah Job
12<?php // app/Jobs/CloseOrder.php34namespace App\Jobs;56use App\Models\Order;78class CloseOrder9{10 protected $order;1112 public function __construct(Order $order, $delay)13 {14 $this->order = $order;15 $this->delay($delay);16 }1718 public function handle()19 {20 if ($this->order->paid_at) {21 return;22 }2324 DB::transaction(function() {25 // ...26 });27 }28}29
12<?php34use App\Jobs\CloseOrder;56dispatch(new CloseOrder($order, $delay = 500));7
12<?php34namespace App\Http\Controllers;56use App\Models\Stock;78class StocksController extends Controller9{10 public function index()11 {12 $keyword = request('search');1314 $stocks = Stock::query()15 ->with('product', 'product.category', 'branch')16 ->leftJoin('products', function ($join) {17 $join->on('stocks.product_id', 'products.id');18 })19 ->leftJoin('branches', function ($join) {20 $join->on('stocks.branch_id', 'branches.id');21 })22 ->when($keyword, function ($query) use($keyword) {23 return $query24 ->where('stock', 'like', "%{$keyword}%")25 ->orWhere('product_name', 'ilike', "%{$keyword}%")26 ->orWhere('branch_name', 'ilike', "%{$keyword}%");27 })28 ->selectRaw('stocks.*, products.name as product_name, branches.name as branch_name')29 ->paginate(request('per_page'));3031 return response()->json(compact('stocks'));32 }33}34
12<?php // app/Queries/SearchStocks.php34namespace App\Queries;56use App\Models\Stock;7use Illuminate\Contracts\Pagination\Paginator;89final class SearchStocks10{11 public static function get($perPage = 20): Paginator12 {13 $keyword = request('search');1415 return Stock::query()16 ->with('product', 'product.category', 'branch')17 ->leftJoin('products', function ($join) {18 $join->on('stocks.product_id', 'products.id');19 })20 ->leftJoin('branches', function ($join) {21 $join->on('stocks.branch_id', 'branches.id');22 })23 ->when($keyword, function ($query) use($keyword) {24 return $query25 ->where('stock', 'like', "%{$keyword}%")26 ->orWhere('product_name', 'ilike', "%{$keyword}%")27 ->orWhere('branch_name', 'ilike', "%{$keyword}%");28 })29 ->selectRaw('stocks.*, products.name as product_name, branches.name as branch_name')30 ->paginate($perPage);31 }32}33
12<?php34use App\Queries\SearchStocks;56class StocksController extends Controller7{8 public function index()9 {10 $stocks = SearchStocks::get();1112 return response()->json(compact('stocks'));13 }14}15