mirror of
https://github.com/kevin-DL/LaravelShoppingcart.git
synced 2026-01-11 18:54:33 +00:00
Updated the search function, it now does a better search, including options, and it returns the rowid of the found item(s)
This commit is contained in:
@@ -214,12 +214,15 @@ class Cart {
|
||||
{
|
||||
foreach($this->getContent() as $item)
|
||||
{
|
||||
$rowId = $this->generateRowId($search['id'], $search['options']);
|
||||
$found = $item->search($search);
|
||||
|
||||
if($rowId === $item->rowid) return true;
|
||||
if($found)
|
||||
{
|
||||
$rows[] = $item->rowid;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return (empty($rows)) ? false : $rows;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,4 +19,23 @@ class CartRowCollection extends Collection {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
public function search(Array $search)
|
||||
{
|
||||
foreach($search as $key => $value)
|
||||
{
|
||||
if($key === 'options')
|
||||
{
|
||||
$found = $this->{$key}->search($value);
|
||||
}
|
||||
else
|
||||
{
|
||||
$found = ($this->{$key} === $value) ? true : false;
|
||||
}
|
||||
|
||||
if( ! $found) return false;
|
||||
}
|
||||
|
||||
return $found;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -19,4 +19,16 @@ class CartRowOptionsCollection extends Collection {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
public function search(Array $search)
|
||||
{
|
||||
foreach($search as $key => $value)
|
||||
{
|
||||
$found = ($this->{$key} === $value) ? true : false;
|
||||
|
||||
if( ! $found) return false;
|
||||
}
|
||||
|
||||
return $found;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -191,16 +191,35 @@ class CartTest extends TestCase {
|
||||
|
||||
public function testCartCanSearch()
|
||||
{
|
||||
Cart::add(1, 'test', 1, 10.00, ['size' => 'L']);
|
||||
Cart::add(2, 'test', 2, 10.00, ['size' => 'L']);
|
||||
Cart::add(1, 'Product 1', 1, 10.00, ['size' => 'large', 'color' => 'red']);
|
||||
Cart::add(2, 'Product 2', 1, 10.00, ['size' => 'large']);
|
||||
|
||||
$search = Cart::search(['id' => 1, 'options' => ['size' => 'L']]);
|
||||
|
||||
$this->assertTrue($search);
|
||||
|
||||
$search = Cart::search(['id' => 3, 'options' => ['size' => 'L']]);
|
||||
$search = Cart::search(['id' => 1, 'name' => 'Product 1']);
|
||||
$this->assertEquals($search, ['a308327de59a3e249baabc24a6c29928']);
|
||||
|
||||
$search = Cart::search(['id' => 2, 'name' => 'Product 1']);
|
||||
$this->assertFalse($search);
|
||||
|
||||
$search = Cart::search(['id' => 2, 'name' => 'Product 2']);
|
||||
$this->assertEquals($search, ['bb0042610e1c6e8bfd7293bfa1807f82']);
|
||||
|
||||
$search = Cart::search(['id' => 1, 'price' => 10.00]);
|
||||
$this->assertEquals($search, ['a308327de59a3e249baabc24a6c29928']);
|
||||
|
||||
$search = Cart::search(['qty' => 1, 'price' => 10.00]);
|
||||
$this->assertEquals($search, ['a308327de59a3e249baabc24a6c29928', 'bb0042610e1c6e8bfd7293bfa1807f82']);
|
||||
|
||||
$search = Cart::search(['id' => 2, 'kaas' => 'Product 2']);
|
||||
$this->assertFalse($search);
|
||||
|
||||
$search = Cart::search(['id' => 2, 'options' => ['size' => 'large']]);
|
||||
$this->assertEquals($search, ['bb0042610e1c6e8bfd7293bfa1807f82']);
|
||||
|
||||
$search = Cart::search(['options' => ['size' => 'large']]);
|
||||
$this->assertEquals($search, ['a308327de59a3e249baabc24a6c29928', 'bb0042610e1c6e8bfd7293bfa1807f82']);
|
||||
|
||||
$search = Cart::search(['id' => 1, 'options' => ['color' => 'red']]);
|
||||
$this->assertEquals($search, ['a308327de59a3e249baabc24a6c29928']);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user