user2988129
user2988129

Reputation: 301

laravel mongodb does not save

The documentation doesn't go into much detail about saving data to mongodb.

I've installed a fresh install of laravel and set the up the mongo connections as in the docs, installed mongodb itself.

Created a model

use Jenssegers\Mongodb\Model as Eloquent;

class Notifications extends Eloquent {

    protected $connection = 'mongodb';
    protected $collection = 'notifications';

    public static function foo()
    {
        return 'test returning from model';
    }

}

And create a simple route to test

Route::get('notifiction' , function(){

    $notifiction = new Notifications();

    $arr = array('name' => 'John Doe');

    $notifiction->save($arr);
});

But when I run localhost/mongo/public/notifiction I get Whoops, looks like something went wrong. I'm not sure what else needs doing to save information to mongodb through laravel?

Upvotes: 1

Views: 4172

Answers (3)

rosnk
rosnk

Reputation: 1098

This error is most likely to do with mass assignment. That is laravel treats every thing as unsafe before saving it to database. Thus we have to whitelist the fields we are trying to save.

The way we do this is in model. Lets say you are trying to save data in Users table using USER model. First open app/models/user.php and add following line:

class User extends Eloquent {
protected $fillable = ['name'];

}

Above, in fillable we are listing name as we want to save name from controller (if you have any additional data fill in the array). Now we can save data from controller.

Eg: User::create(array('name' => 'John')); will save name in Users collection. Please note the name of collection will be the name of the model unless specified otherwise.

[If this does not solve your problem, enable debug by going to app/config/app.php and setting debug =true. Find the error and try searching.]

Upvotes: 4

Nithil George
Nithil George

Reputation: 275

You need not to do like model for SQL.

You try model like this

class User extends Moloquent {
    protected $connection = 'mongodb';
    protected $collection = 'collection1';
    protected $fillable = ['_id','userName','passwd'];
}

You can try this to insert

DB::connection('mongodb')->collection('collection1')
    ->insert(array(
             '_id' => 'H12345',
             'userName' => 'Nithil',
             'passwd' => 'qwoeuig'));

Using Moloquent is more convenient in using multiple DBS. For using Moloquent, you may register an alias for the MongoDB model by adding the following to the alias array in app/config/app.php:

'Moloquent' => 'Jenssegers\Mongodb\Model',

This will allow you to use the registered alias like:

class MyModel extends Moloquent {}

Upvotes: 2

linktoahref
linktoahref

Reputation: 7992

As OP has mentioned the error was due to

Did not installed the MongoDB PHP Library

Apart from that, to do mass assignment in Laravel, the fields should either be "white listed" or "black listed"

To whitelist the field(s) add

// name, age, username and email could be mass assigned
protected $fillable = ['name', 'age', 'username', 'email'];

To blacklist the field(s) add

// except _id everything could be mass assigned
protected $guarded = ['_id'];

to your model file

Upvotes: 0

Related Questions