Database

Migrations

// Good
Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamps();
});

// Bad
DB::statement('CREATE TABLE users (id INT AUTO_INCREMENT, name VARCHAR(255), email VARCHAR(255) UNIQUE, created_at TIMESTAMP, updated_at TIMESTAMP)');

Seeders

// Good
class UserSeeder extends Seeder
{
    public function run()
    {
        User::factory()->count(50)->create();
    }
}

// Bad
DB::table('users')->insert([
    'name' => 'John Doe',
    'email' => 'john@example.com',
]);

Query Builder vs Eloquent

// Good (Eloquent)
$users = User::where('active', 1)->get();

// Good (Query Builder)
$users = DB::table('users')->where('active', 1)->get();

// Bad
$result = mysqli_query($conn, "SELECT * FROM users WHERE active = 1");
$users = mysqli_fetch_all($result, MYSQLI_ASSOC);