Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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
       {
          //
       }
like image 312
akshay Avatar asked Mar 20 '17 15:03

akshay


2 Answers

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

like image 142
Alexey Mezenin Avatar answered Sep 28 '22 16:09

Alexey Mezenin


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';
like image 26
aynber Avatar answered Sep 28 '22 16:09

aynber