Search code examples
laravelmodellaravel-4package

Using models on packages


I'm trying to use Laravel packages. I created MyVendor/MyPackage

Routes, controllers, filters are already working. This is the classmap of my package:

"classmap": [
        "src/migrations",
        "src/controllers",
        "src/seeds",
        "src/models"
    ],

This is how looks my model:

namespace MyVendor\MyPackage\Models;             
class MyModel extends \Illuminate\Database\Eloquent\Model {   
}

And this is the code inside my controller which is in namespace MyVendor\MyPackage.

$test = new models\MyModel;      

I'm getting this error: Class 'MyVendor\MyPackage\models\MyModel' not found

I can't figure out why. I'm new with namespaces so maybe it is something related to this. I tried with composer update, composer dump-autoload (inside my package) and still can't find my models.

If I get the declared classes with get_declared_classes() I can't see my model there.

The problem is that my model classes are not autoloading.


Solution

  • Try this:

    1. Create models directory inside your package and add it to the package's classmap
    2. Add a model YourModel.php with the following:

      <?php
      // Note no namespace
      
      use \Illuminate\Database\Eloquent\Model as Eloquent;
      
      class YourModel extends Eloquent {
          //
      }
      
    3. Run composer dump-autoload from your package directory first and then root directory
    4. Test your model by putting this at the top of your routes.php file:

      <?php
      $testModel = YourModel::get();
      die(var_dump($testModel));
      ?>