public function testHasOne() { $customer = new Customer(); $source = DataSource::make($customer); $source['name'] = 'Frank'; $source['surname'] = 'Sinatra'; $source['details.biography'] = 'A nice life!'; $source['details.accepts_cookies'] = 0; $source['details.accepts_cookies'] = 0; // test cache assertSame('Frank', $source['name']); assertSame('A nice life!', $source['details.biography']); assertSame(0, $source['details.accepts_cookies']); $source->save(); assertSame(1, Customer::all()->count()); assertSame(1, CustomerDetail::all()->count()); // test everything's saved $result = Customer::all()->first(); assertSame('A nice life!', $result->details->biography); assertEquals(0, $result->details->accepts_cookies); // test we don't create duplicates $source['surname'] = 'Sinatrax'; $source['details.biography'] = 'prefers not say'; $source['details.accepts_cookies'] = 1; assertSame(1, Customer::all()->count()); assertSame(1, CustomerDetail::all()->count()); return; }
public function saveAfter(Model $child) { // this is what `$this->relation->save($child)` does // we inline it here to wrap the save() method $child->setAttribute($this->relation->getPlainForeignKey(), $this->relation->getParentKey()); $result = DataSource::make($child)->save(); return $result; }
public function saveAfter(Collection $children) { $result = []; foreach ($children as $child) { $result[] = DataSource::make($child)->save(); } $this->relation->sync($children); return $result; }
public function saveAfter(Collection $children) { $result = []; foreach ($children as $child) { $child->setAttribute($this->relation->getPlainForeignKey(), $this->relation->getParentKey()); $result[] = DataSource::make($child)->save(); } return $result; }
protected function makeAndBind($var, $key = null) { $source = DataSource::make($var); if ($var instanceof Collection && func_num_args() > 1) { $relation = Cache::getRelation($this->getDelegatedStorage(), $key); if (!$relation instanceof Relation) { throw new \LogicException('Expected Relation, got ' . get_type_class($relation)); } $source->bindToRelation($relation); } return $source; }
public function testUpdateChildren() { // --- test load $this->createModels(Customer::class, [['name' => 'Frankx', 'surname' => 'Sinatrax']]); $this->createModels(Order::class, [['code' => 'a1x', 'shipping' => 'homex', 'customer_id' => 1], ['code' => 'b1x', 'shipping' => 'officex', 'customer_id' => 1]]); $source = DataSource::make(Customer::find(1)); $source['name'] = 'Frank'; $source['surname'] = 'Sinatra'; $source['orders.0.code'] = 'a1'; $source['orders.0.shipping'] = 'home'; $source['orders.1.code'] = 'b1'; $source['orders.1.shipping'] = 'office'; $source->save(); assertEquals(1, $source['orders.0.customer_id']); assertEquals(1, $source['orders.1.customer_id']); assertModelArrayEqual([['name' => 'Frank', 'surname' => 'Sinatra']], Customer::all()->toArray()); assertModelArrayEqual([['code' => 'a1', 'shipping' => 'home', 'customer_id' => 1], ['code' => 'b1', 'shipping' => 'office', 'customer_id' => 1]], Order::all()->toArray()); }
public function testUpdateChildren() { $this->createModels(Order::class, [['code' => 'a1x', 'shipping' => 'homex', 'customer_id' => 1]]); $this->createModels(Book::class, [['title' => 'Happinessx'], ['title' => 'Delightx']]); $this->createPivot('book_order', [['book_id' => 1, 'order_id' => 1], ['book_id' => 2, 'order_id' => 1]]); $source = DataSource::make(Order::find(1)); $source['code'] = 'a1'; $source['shipping'] = 'home'; $source['books.0.title'] = 'Happiness'; $source['books.1.title'] = 'Delight'; $source->save(); assertModelArrayEqual([['code' => 'a1', 'shipping' => 'home', 'customer_id' => 1]], Order::all()->toArray()); assertModelArrayEqual([['title' => 'Happiness'], ['title' => 'Delight']], Book::all()->toArray()); // repeat $source->save(); assertModelArrayEqual([['code' => 'a1', 'shipping' => 'home', 'customer_id' => 1]], Order::all()->toArray()); assertModelArrayEqual([['title' => 'Happiness'], ['title' => 'Delight']], Book::all()->toArray()); }
public function testUnset() { $this->createModels(Order::class, $array = [['code' => 'a1', 'shipping' => 'home', 'customer_id' => 1], ['code' => 'b1', 'shipping' => 'office', 'customer_id' => 1]]); $collection = Order::all(); $source = DataSource::make($collection); assertInstanceOf(Order::class, $source[0]); assertInstanceOf(Order::class, $source[1]); assertInstanceOf(Order::class, $collection[0]); assertInstanceOf(Order::class, $collection[1]); unset($source[0]); assertNull($source[0]); assertInstanceOf(Order::class, $source[1]); assertTrue(!isset($collection[0])); assertInstanceOf(Order::class, $collection[1]); unset($source[1]); assertNull($source[1]); assertTrue(!isset($collection[1])); }
public function save() { foreach ($this->getDelegatedStorage() as $i) { DataSource::make($i)->save(); } }
public function testCreateChildren() { $this->createModels(CustomerDetail::class, []); $this->createModels(Customer::class, []); $source = DataSource::make(new CustomerDetail()); $source['id'] = 1; $source['biography'] = 'A nice life!'; $source['accepts_cookies'] = 0; $source['customer.name'] = 'Frank'; $source['customer.surname'] = 'Sinatra'; $source->save(); assertModelArrayEqual([['customer_id' => '1', 'biography' => 'A nice life!', 'accepts_cookies' => '0', 'customer' => ['id' => '1', 'name' => 'Frank', 'surname' => 'Sinatra']]], CustomerDetail::with('customer')->get()->toArray()); assertModelArrayEqual([['name' => 'Frank', 'surname' => 'Sinatra']], Customer::all()->toArray()); // repeat $source->save(); assertModelArrayEqual([['customer_id' => '1', 'biography' => 'A nice life!', 'accepts_cookies' => '0', 'customer' => ['id' => '1', 'name' => 'Frank', 'surname' => 'Sinatra']]], CustomerDetail::with('customer')->get()->toArray()); assertModelArrayEqual([['name' => 'Frank', 'surname' => 'Sinatra']], Customer::all()->toArray()); }
/** * @param Model $child */ public function saveBefore(Model $child) { $result = DataSource::make($child)->save(); $this->relation->associate($child); return $result; }
public function from($source) { if (!$source instanceof AbstractDataSource) { $source = DataSource::make($source); } return $this->fields->from($source); }
public function testMake() { $this->assertEquals(ObjectDataSource::class, get_class(DataSource::make(new \stdClass()))); // pass an non stdClass instance $this->assertEquals(ObjectDataSource::class, get_class(DataSource::make($this))); }
public function testSet() { $array = $this->make(['apple' => 'Apples']); $source = DataSource::make($array); $source['banana'] = 'Bananas'; assertSame('Bananas', $source['banana']); assertSame(['apple' => 'Apples', 'banana' => 'Bananas'], $source->toArray()); // multi step creation $array = $this->make([]); $source = DataSource::make($array); $source['apple.b.c.d'] = 'hello'; assertSame('hello', $source['apple.b.c.d']); assertEquals($this->make(['apple' => ['b' => ['c' => ['d' => 'hello']]]]), $source->unwrap()); }