Installation Add the package via Composer (if available in a private repo or fork):
composer require beloop/course
Publish the config (if applicable):
php artisan vendor:publish --provider="Beloop\Course\CourseServiceProvider"
First Use Case Load a course model and display its metadata:
use Beloop\Course\Models\Course;
$course = Course::find(1);
echo $course->title; // Basic property access
echo $course->description;
Key Files to Review
config/course.php (if published)app/Models/Course.php (or vendor/beloop/course/src/Models/Course.php)routes/course.php (if included in the package)Course CRUD Use Eloquent methods for basic operations:
// Create
$course = Course::create([
'title' => 'Laravel Fundamentals',
'slug' => 'laravel-fundamentals',
'description' => 'Learn Laravel from scratch...',
]);
// Update
$course->update(['description' => 'Updated description']);
// Delete
$course->delete();
Course Relationships If the package supports modules/lessons:
// Eager-load relationships
$courseWithLessons = Course::with('lessons')->find(1);
// Access related models
foreach ($courseWithLessons->lessons as $lesson) {
echo $lesson->title;
}
API Integration Use Laravel’s built-in API resources:
// In routes/api.php
Route::apiResource('courses', 'CourseController');
// Example Controller
public function index() {
return CourseResource::collection(Course::all());
}
Frontend Integration Pass course data to Blade views:
// Controller
public function show($id) {
return view('courses.show', ['course' => Course::findOrFail($id)]);
}
// Blade
<h1>{{ $course->title }}</h1>
<p>{{ $course->description }}</p>
Archived Package Risks
Configuration Quirks
config/course.php isn’t published, check for hardcoded defaults in the package.courses table).Debugging Tips
Course::observe(CourseObserver::class);
DB::enableQueryLog();
Course::find(1);
dd(DB::getQueryLog());
Customizing Models
Extend the base Course model:
namespace App\Models;
use Beloop\Course\Models\Course as BeloopCourse;
class Course extends BeloopCourse {
// Add custom accessors/mutators
public function getFormattedTitleAttribute() {
return strtoupper($this->title);
}
}
Adding Fields If the schema is too rigid, create a pivot table or JSON column:
// Migration example
Schema::table('courses', function (Blueprint $table) {
$table->json('metadata')->nullable();
});
Testing Use Laravel’s testing tools to verify functionality:
public function test_course_creation() {
$course = Course::factory()->create();
$this->assertDatabaseHas('courses', ['id' => $course->id]);
}
How can I help you explore Laravel packages today?