Skip to content

Instantly share code, notes, and snippets.

@ikarius6
Created February 7, 2020 03:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ikarius6/d793208b851f9583b5d858e9f22b265f to your computer and use it in GitHub Desktop.
Save ikarius6/d793208b851f9583b5d858e9f22b265f to your computer and use it in GitHub Desktop.
//Model: Expense.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Expense extends Model
{
protected $fillable = [
'source_id', 'expense_category_id', 'quantity', 'note'
];
//...
public function source()
{
return $this->belongsTo(Source::class);
}
}
//Controller: ExpenseController.php
<?php
namespace App\Http\Controllers;
use App\Expense;
use App\Http\Requests\ExpenseRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class ExpenseController extends Controller
{
//...
public function store(ExpenseRequest $request)
{
DB::beginTransaction();
try {
$expense = new Expense($request->all());
Auth::user()->expenses()->save($expense);
$expense->source->subExpense($expense);
DB::commit();
} catch (\Exception $e) {
DB::rollback();
return response()->json(['message' => $e->getMessage()], 500);
}
return response()->json($expense, 201);
}
}
//Model: Source.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Source extends Model
{
protected $fillable = [
'name', 'quantity'
];
//...
public function expenses()
{
return $this->hasMany(Expense::class);
}
public function subExpense($expense) {
$this->quantity = $this->quantity - $expense->quantity;
$this->save();
}
}
@asaelmedina
Copy link

Algo así debería quedar pero en expense
//Expense model

public function subExpense($expense) {
$this>quantity-=$this->source()->quantity// puedes acceder al source por medio del belongsTo ya que es
parte del mismo modelo
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment