1
votes

I am using Laravel 5.4 : Queue for creating the jobs for bulk insertion and APi calls. Whenever I call the API from the Postman, it executes the script but processing of the Jobs fail with the exception

Illuminate\Database\Eloquent\ModelNotFoundException' with message 'No query results for model [App\message] ' in C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Builder.php:312

> Stack trace:
> #0 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Queue\SerializesAndRestoresModelIdentifiers.php(46):
> Illuminate\Database\Eloquent\Builder->findOrFail(NULL)
> #1 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Queue\SerializesModels.php(42):
> App\Jobs\createmessage->getRestoredPropertyValue(Object(Illuminate\Contracts\Database\ModelIdentifier))
> #2 [internal function]: App\Jobs\createmessage->__wakeup()
> #3 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Queue\CallQueuedHandler.php(38):
> unserialize('O:22:"App\\Jobs\\...')
> #4 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Queue\Jobs\Job.php(69):
> Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\DatabaseJob),
> Array)
> #5 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Queue\Worker.php(317):
> Illuminate\Queue\Jobs\Job->fire()
> #6 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Queue\Worker.php(267):
> Illuminate\Queue\Worker->process('database',
> Object(Illuminate\Queue\Jobs\DatabaseJob),
> Object(Illuminate\Queue\WorkerOptions))
> #7 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Queue\Worker.php(224):
> Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\DatabaseJob),
> 'database', Object(Illuminate\Queue\WorkerOptions))
> #8 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Queue\Console\WorkCommand.php(102):
> Illuminate\Queue\Worker->runNextJob('database', 'default',
> Object(Illuminate\Queue\WorkerOptions))
> #9 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Queue\Console\WorkCommand.php(86):
> Illuminate\Queue\Console\WorkCommand->runWorker('database', 'default')
> #10 [internal function]: Illuminate\Queue\Console\WorkCommand->fire()
> #11 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(30):
> call_user_func_array(Array, Array)
> #12 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(87):
> Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
> #13 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Container\BoundMethod.php(31):
> Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application),
> Array, Object(Closure))
> #14 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Container\Container.php(539):
> Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application),
> Array, Array, NULL)
> #15 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Console\Command.php(182): Illuminate\Container\Container->call(Array)
> #16 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\symfony\console\Command\Command.php(264):
> Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput),
> Object(Illuminate\Console\OutputStyle))
> #17 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Console\Command.php(168): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput),
> Object(Illuminate\Console\OutputStyle))
> #18 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\symfony\console\Application.php(874):
> Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput),
> Object(Symfony\Component\Console\Output\ConsoleOutput))
> #19 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\symfony\console\Application.php(228):
> Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand),
> Object(Symfony\Component\Console\Input\ArgvInput),
> Object(Symfony\Component\Console\Output\ConsoleOutput))
> #20 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\symfony\console\Application.php(130):
> Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput),
> Object(Symfony\Component\Console\Output\ConsoleOutput))
> #21 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php(122):
> Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput),
> Object(Symfony\Component\Console\Output\ConsoleOutput))
> #22 C:\xampp\htdocs\Abhishek\SMS\SMS_rest_dev\artisan(36): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput),
> Object(Symfony\Component\Console\Output\ConsoleOutput))
> #23 {main}

My MessageController.php (Controller file)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\message;
use App\template;
use Illuminate\Support\Facades\DB;
use App\API\ApiHelper;
use App\Repos\Repository;
use GuzzleHttp\Client;
use App\Jobs\createmessage;

class MessageController extends Controller
{
    use ApiHelper;
    protected $model;
    protected $mes;
    public function __construct(message $message)
    {    
        $this->model = new Repository( $message );
        $this->mes = $message;
        $this->middleware('auth:api'); 
    }

    public function store(Request $request)
    {
        dispatch(new createmessage ($this->mes));  
    }
}

My job classes file

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\API\ApiHelper;
use App\Repos\Repository;
use GuzzleHttp\Client;
use App\message;
use App\template;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;


class createmessage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    use ApiHelper;
    protected $model;

    public $tries = 2;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(message $message)
    {
        $this->model = $message;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle(Request $request)
    {

        $use_id = $request->user()->id;

        foreach($request->data as $temp)
        {
            //code
        }

        return  response()->json($sms, 201);

    }
}

My message file (Model)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;


class message extends BaseModel
{
    protected $table = 'message';
    //public $timestamps = false;
    public $primaryKey = 'message_id';
    protected $fillable =['message_id', 'user_id','template_id', 'sender_id', 'params', 'message', 'cost', 'phone_number'];
    const CREATED_AT = 'created_on';
    const UPDATED_AT = 'updated_on';


    public function user()
    {
        return $this->belongsTo(user::class)->select('id', 'name');
    }

    public function message_template()
    {
        return $this->belongsTo(template::class)->select('template_id', 'template', 'type');
    }

}

my api.php (route file)

<?php

use Illuminate\Http\Request;


// Route::middleware('auth:api')->get('/user', function (Request $request) {
//     return $request->user();
// });

Route::Resource('test/client', 'ClientsController', ['only' => ['index', 'show', 'store']]);
Route::Resource('test/sender', 'SenderController', ['only' => ['index','show', 'store', 'destroy']]);
Route::Resource('test/template', 'TemplateController', ['only' => ['index','show', 'store', 'destroy']]);
Route::Resource('test/message', 'MessageController', ['only' => ['index','show', 'store']]);

Route::get('/userdetail', function (Request $request) {
    return $request->user();
})->middleware(['auth:api', 'scopes:manage-SMS']);

I have tried to followed the documentation for queue in Laravel. if other information is required, it will be provided. Any help will be greatly appreciated. Thanks

1
The exception means that you have not data in database for given message id. Do you have any data?Misagh Laghaei
Have you run composer dumpautoload?aynber
Also your first letter of class names should be Uppercase.Misagh Laghaei
Provide your route code tooAddWeb Solution Pvt Ltd
@MisaGH yes I have data in my db. I have checked the code prior to adding the Queue part and it was working. Ok i will change the cases, but will it impact the code ?? I don't know that.Abhishek Choudhery

1 Answers

0
votes

Maybe this will help: Laravel 5.1 No query results for model in queue

You might have to remove the 'SerializesModels'-trait.