5.3 - Preparing for Extraction

This commit is contained in:
Adam Wathan
2016-11-17 21:17:48 -05:00
parent e0f49677d8
commit 3c41fcc4f0
4 changed files with 14 additions and 4 deletions

View File

@@ -32,7 +32,7 @@ class Concert extends Model
public function orders() public function orders()
{ {
return $this->hasMany(Order::class); return $this->belongsToMany(Order::class, 'tickets');
} }
public function hasOrderFor($customerEmail) public function hasOrderFor($customerEmail)
@@ -69,9 +69,9 @@ class Concert extends Model
public function createOrder($email, $tickets) public function createOrder($email, $tickets)
{ {
$order = $this->orders()->create([ $order = Order::create([
'email' => $email, 'email' => $email,
'amount' => $tickets->count() * $this->ticket_price, 'amount' => $tickets->sum('price'),
]); ]);
foreach ($tickets as $ticket) { foreach ($tickets as $ticket) {

View File

@@ -17,4 +17,14 @@ class Ticket extends Model
{ {
$this->update(['order_id' => null]); $this->update(['order_id' => null]);
} }
public function concert()
{
return $this->belongsTo(Concert::class);
}
public function getPriceAttribute()
{
return $this->concert->ticket_price;
}
} }

View File

@@ -15,7 +15,6 @@ class CreateOrdersTable extends Migration
{ {
Schema::create('orders', function (Blueprint $table) { Schema::create('orders', function (Blueprint $table) {
$table->increments('id'); $table->increments('id');
$table->unsignedInteger('concert_id');
$table->integer('amount'); $table->integer('amount');
$table->string('email'); $table->string('email');
$table->timestamps(); $table->timestamps();

View File

@@ -32,6 +32,7 @@ class PurchaseTicketsTest extends TestCase
/** @test */ /** @test */
function customer_can_purchase_tickets_to_a_published_concert() function customer_can_purchase_tickets_to_a_published_concert()
{ {
$this->disableExceptionHandling();
$concert = factory(Concert::class)->states('published')->create(['ticket_price' => 3250])->addTickets(3); $concert = factory(Concert::class)->states('published')->create(['ticket_price' => 3250])->addTickets(3);
$this->orderTickets($concert, [ $this->orderTickets($concert, [