/** * Run the migrations. * * @return void */ public function up() { Schema::create('definition_facet_types', function ($table) { $table->increments('id'); $table->string('facet_name', 255); }); $facet_types = ['rights', 'keyword', 'language', 'theme', 'publisher_name']; $facet_type_models = []; foreach ($facet_types as $facet) { $facet_type = \FacetType::create(['facet_name' => $facet]); $facet_type->save(); if ($facet != 'keyword') { $facet_type_model[$facet] = $facet_type; } else { $facet_type_model['keywords'] = $facet_type; } } Schema::create('definition_facets', function ($table) { $table->increments('id'); $table->integer('definition_id'); $table->integer('facet_id'); $table->string('facet_name'); $table->string('value'); }); // Copy all of the facet related info to the new definition_facets table $definitions = \Definition::all(); foreach ($definitions as $definition) { foreach ($facet_type_models as $facet_name => $facet_type) { if ($facet_name != 'keywords' && !empty($definition->{$facet_name})) { $facet = \Facet::create(['definition_id' => $definition->id, 'facet_id' => $facet_type->id, 'facet_name' => $facet_name, 'value' => $definition->{$facet_name}]); $facet->save(); } else { // split the keywords if (!empty($definition->keywords)) { $keywords = explode(',', $definition->keywords); foreach ($keywords as $keyword) { $facet = \Facet::create(['definition_id' => $definition->id, 'facet_id' => $facet_type->id, 'facet_name' => 'keyword', 'value' => $keyword]); $facet->save(); } } } } } }
/** * Update the facets for a definition * * @param Eloquent $definition * * @return void */ private function updateFacets($definition) { $facet_types = \FacetType::all()->toArray(); foreach ($definition->facets() as $facet) { \Facet::delete($facet['id']); } foreach ($facet_types as $facet_type) { $facet_name = $facet_type['facet_name']; if (!empty($definition->{$facet_name})) { $facet = \Facet::create(['definition_id' => $definition->id, 'facet_id' => $facet_type['id'], 'facet_name' => $facet_type['facet_name'], 'value' => $definition->{$facet_name}]); $facet->save(); } } // Process keywords if present if (!empty($definition->keywords)) { // Split the keywords $keywords = explode(',', $definition->keywords); foreach ($keywords as $keyword) { $facet = \Facet::create(['definition_id' => $definition->id, 'facet_id' => $facet_type['id'], 'facet_name' => 'keyword', 'value' => $keyword]); $facet->save(); } } }