I am new to Laravel and I was working on Laravel 4. I am trying to migrate to Laravel 6 on docker and I have the basic setup and Laravel project is up.
I created a table and a respective Eloquent Model in the models folder. I am able to read the data in a controller.
namespace AppHttpControllers;
use mysql_xdevapiException;
use AppModelsCard;
class welcomeController {
public function show() {
try {
$cards = Card::all();
} catch (Exception $e) {
die("Could not connect - " . $e );
}
print_r($cards); exit;
}
}
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Card extends Model
{
}
In the older version of Laravel project, the ‘Card::all()’ was working without using USE command to import it.
I know namespaces are important, but wondering how it worked and how I can make replicate the same.
Advertisement
Answer
I do not know why you want to discard using namespaces, If you want to NOT use namespaces
for your models, edit your composer.json
like below
"autoload": {
"psr-4": {
"App\": "app/"
},
"classmap": [
"database/seeds",
"database/factories",
"models"
]
},
Make a directory in your root directory and add a new file i.e ‘models/Card.php’.
below should be the content of your Card.php
<?php
use IlluminateDatabaseEloquentModel;
class Card extends Model {
//database table here
protected $table = "cards";
//Fillables
protected $fillable = [];
}
And in your controller WelcomeController
<?php
namespace AppHttpControllers;
use mysql_xdevapiException;
class welcomeController {
public function show() {
try {
$cards = Card::all();
} catch (Exception $e) {
die("Could not connect - " . $e );
}
print_r($cards); exit;
}
}
Do not forget the forward slash in your card model i.e ‘Card::all()’
Make sure to move your models
folder outside the app
directory, Kindly note this is not php
best practice