/** * doExecute * * @return void */ public function doExecute() { $faker = \Faker\Factory::create(); $blogMapper = new DataMapper('blogs'); $categoryMapper = new DataMapper('categories'); $authorMapper = new DataMapper('authors'); $postMapper = new DataMapper('posts'); $psMappingMapper = new DataMapper('category_post_maps'); $content = file_get_contents(__DIR__ . '/fixtures/testcase.md'); list($introtext, $fulltext) = explode('<!-- {READMORE} -->', $content); $metadesc = $faker->text(); foreach ($blogMapper->findAll() as $blog) { $authors = iterator_to_array($authorMapper->find(['blog' => $blog->id])); $categories = iterator_to_array($categoryMapper->find(['blog' => $blog->id])); // Post foreach (range(1, 30) as $row) { $data = array(); $data['blog'] = $blog->id; $data['type'] = 'post'; $data['title'] = $faker->sentence(rand(3, 8)); $data['alias'] = \Windwalker\Filter\OutputFilter::stringURLSafe($data['title']); $data['introtext'] = $introtext; $data['fulltext'] = $fulltext; $data['metadesc'] = $metadesc; $data['state'] = 1; $data['created'] = $faker->dateTime->format('Y-m-d H:i:s'); $data['modified'] = $faker->dateTime->format('Y-m-d H:i:s'); $data['publish_up'] = ''; $data['publish_down'] = ''; $data['author'] = $faker->randomElement($authors)->id; $data = $postMapper->createOne($data); // Categories foreach ($faker->randomElements($categories, rand(1, 3)) as $category) { $map['category'] = $category->id; $map['post'] = $data['id']; $psMappingMapper->createOne($map); } } // Static foreach (range(1, 3) as $row) { $data = array(); $data['blog'] = $blog->id; $data['type'] = 'static'; $data['title'] = $faker->sentence(rand(3, 8)); $data['alias'] = \Windwalker\Filter\OutputFilter::stringURLSafe($data['title']); $data['introtext'] = $introtext; $data['fulltext'] = $fulltext; $data['metadesc'] = $metadesc; $data['state'] = 1; $data['created'] = $faker->dateTime->format('Y-m-d H:i:s'); $data['modified'] = $faker->dateTime->format('Y-m-d H:i:s'); $data['publish_up'] = ''; $data['publish_down'] = ''; $data['author'] = $faker->randomElement($authors)->id; $data = $postMapper->createOne($data); } } $this->command->out('Post Seeder executed.')->out(); }
/** * Method to test find(). * * @return void * * @covers Windwalker\DataMapper\AbstractDataMapper::find */ public function testFind() { $dataset = $this->instance->find(array(), null, 0, 3); $this->assertEquals(array(1, 2, 3), $dataset->id); $this->assertEquals(array('Alstroemeria', 'Amaryllis', 'Anemone'), $dataset->title); $dataset = $this->instance->find(array('state' => 1), 'ordering DESC', 2, 3); $this->assertEquals(array(1, 1, 1), $dataset->state); $this->assertEquals(array(82, 79, 77), $dataset->ordering); $this->assertEquals(array('Violet', 'red', 'pink'), $dataset->title); $datamapper = new DataMapper('ww_flower'); $datamapper->setSelectFields(array('id', 'state')); $dataset = $datamapper->find(array('state' => 1), 'ordering DESC', 2, 3); $this->assertEquals(array(null, null, null), $dataset->catid); }
/** * Execute the controller. * * @return mixed Return executed result. * * @throws \LogicException * @throws \RuntimeException */ public function execute() { $query = $this->input->getString('query'); $query = trim($query); if (!$query) { return; } $queries = explode(' ', $query); $mapper = new DataMapper('users'); $conditions = []; $q = Ioc::getDatabase()->getQuery(true); foreach ($queries as $query) { if (!trim($query)) { continue; } $query = $q->quote('%' . $query . '%'); $conditions[] = 'username LIKE ' . $query; $conditions[] = 'fullname LIKE ' . $query; $conditions[] = 'email LIKE ' . $query; } $conditions = new QueryElement('()', $conditions, ' OR '); $users = $mapper->find([(string) $conditions], 'username', 0, 10); $suggestions = []; $tmpl = <<<VALUE <div> \t<img width="48" height="48" class="find-author-avatar pull-left" src="%s" alt=""/> \t<div class="find-author-name">%s <small>%s</small></div> \t<small>%s</small> \t<div class="clearfix"></div> </div> VALUE; foreach ($users as $user) { $suggestions[] = ['value' => sprintf($tmpl, UserHelper::getAvatar($user->id), $user->fullname, $user->username, $user->email), 'data' => $user->username]; } $response = new Response(); $response->setBody(json_encode(['suggestions' => $suggestions])); $response->setMimeType('text/json'); $response->respond(); exit; return true; }
/** * @covers Windwalker\DataMapper\AbstractDataMapper::updateAll * @todo Implement testUpdateAll(). */ public function testFlush() { $mapper = new DataMapper('ww_content_tags'); $dataset = new DataSet(); $dataset[] = new Data(array('content_id' => 4, 'tag_id' => 1)); $dataset[] = new Data(array('content_id' => 4, 'tag_id' => 2)); $dataset[] = new Data(array('content_id' => 4, 'tag_id' => 4)); $dataset[] = new Data(array('content_id' => 4, 'tag_id' => 5)); $mapper->flush($dataset, array('content_id' => 4)); $tagMaps = $mapper->find(array('content_id' => 4)); $this->assertEquals(array(1, 2, 4, 5), ArrayHelper::getColumn((array) $tagMaps, 'tag_id'), 'Flush data wrong.'); }
/** * Find records and return data set. * * Example: * - `$mapper->find(array('id' => 5), 'date', 20, 10);` * - `$mapper->find(null, 'id', 0, 1);` * * @param mixed $conditions Where conditions, you can use array or Compare object. * Example: * - `array('id' => 5)` => id = 5 * - `new GteCompare('id', 20)` => 'id >= 20' * - `new Compare('id', '%Flower%', 'LIKE')` => 'id LIKE "%Flower%"' * @param mixed $order Order sort, can ba string, array or object. * Example: * - `id ASC` => ORDER BY id ASC * - `array('catid DESC', 'id')` => ORDER BY catid DESC, id * @param integer $start Limit start number. * @param integer $limit Limit rows. * * @return mixed|DataSet Found rows data set. * @since 2.0 */ public function find($conditions = array(), $order = null, $start = null, $limit = null) { $this->observers->update('onBeforeFind', array($conditions, $order, $start, $limit)); $dataset = parent::find($conditions, $order, $start, $limit); $this->observers->update('onAfterFind', array(&$dataset)); return $dataset; }