akshay
akshay

Reputation: 219

Model not linking to table in laravel php

I have a table named tasks and a model named Task. In my controller method when i run this piece of code

     <?php

        namespace App\Http\Controllers;

        use DB;
        //use app\Task;
        use DateTime;
        use Illuminate\Http\Request;
        use Illuminate\Support\Facades\Input;

        class Task_Controller extends Controller
        {
        //
             public function decide()
             {

             if ($input=="show all task")
             {
                  //$rows=DB::table('task')->get();
                  $rows=\App\Task::all();
                  foreach($rows as $values)
                  {
                     foreach($values as $key=>$val)
                     echo "$key  :  $val <br>";
                     echo "<br><br>";
                  }
              }
         }

It gives me following error: SQLSTATE[HY000]: General error: 1 no such table: tasks (SQL: select * from "tasks")

That is the model should have linked to the task table instead it is linked to the tasks table Why??.

How to make model gets linked to a specific table.

My model class code goes like this

       namespace App;

       use Illuminate\Database\Eloquent\Model;

       class Task extends Model
       {
          //
       }

Upvotes: 7

Views: 7316

Answers (3)

Kxng Kombian
Kxng Kombian

Reputation: 467

By default laravel pluralizes the model names to be be the table names unless stated otherwise in the model by.

protected $table = 'task';

Upvotes: 2

Alexey Mezenin
Alexey Mezenin

Reputation: 163768

You should name your table tasks, this is the best option.

Another way to fix this is to use $table property:

protected $table = 'task';

Note that we did not tell Eloquent which table to use for our Flight model. By convention, the "snake case", plural name of the class will be used as the table name unless another name is explicitly specified. So, in this case, Eloquent will assume the Flight model stores records in the flights table. You may specify a custom table by defining a table property on your model

https://laravel.com/docs/5.4/eloquent#defining-models

Upvotes: 15

aynber
aynber

Reputation: 23011

By default, the table name is the plural of the class name. If you want it to point to a different table, then in your model, add

protected $table = 'task';

Upvotes: 3

Related Questions