示例#1
0
 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;
 }
示例#2
0
 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;
 }
示例#4
0
 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;
 }
示例#6
0
 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());
 }
示例#7
0
 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();
     }
 }
示例#10
0
 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());
 }
示例#11
0
 /**
  * @param Model $child
  */
 public function saveBefore(Model $child)
 {
     $result = DataSource::make($child)->save();
     $this->relation->associate($child);
     return $result;
 }
示例#12
0
文件: Endpoint.php 项目: tacone/bees
 public function from($source)
 {
     if (!$source instanceof AbstractDataSource) {
         $source = DataSource::make($source);
     }
     return $this->fields->from($source);
 }
示例#13
0
 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)));
 }
示例#14
0
 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());
 }