Md Rashedul Hoque Bhuiyan
Md Rashedul Hoque Bhuiyan

Reputation: 10631

How to get Model Object using its name from a variable in Laravel 5?

I am trying to get information from a model using its name which is sent as parameter from blade using ajax call.

$.get("{{ url('auditInformation')}}", {modelName: modelName,versions:versions,currentData:currentData[index]});

Now i need to retrieve information using modelName from a model.

So when i tried this:

$auditInfo=Input::all();
    $modelName=$auditInfo['modelName'];
    $values=$modelName::find(1);

I got this response Class 'Designation' not found

But if i use

$modelName=new Designation();
    $values=$modelName::find(1);

then it shows data exactly what i want.

So i understand that this is all about model ( class ) object.

Is there any way to assign object to $modelName using $auditInfo['modelName'] .

Thanks

Upvotes: 0

Views: 9630

Answers (3)

Muthu Venkatesh
Muthu Venkatesh

Reputation: 31

The single backslash between the singe quote is considered as an escape sequence so use double backslash is 100% work. For example

public function index(Request $request) {
    $model_prefix="App\Models";
    $modal = $model_prefix.'\\'.$request->type;
    $modal::updateOrcreate(['users_id'=>session("user")->users_id],$request->all())->save();
    dd(Profile::all());
}
//Laravel 7.0

Upvotes: 3

DragonFire
DragonFire

Reputation: 4082

This seems to be working

$table_name = "App\Models\PeopleYouMayLikeModel";

$obj = $table_name::where($column_name_identifier_1, '=', $row_identifier_1)
                  ->where($column_name_identifier_2, '=', $row_identifier_2)->first();

Upvotes: 3

Binggre
Binggre

Reputation: 191

If you want to do that way, you should use the model's namespace.

For example, if the 'Destination' model's namespace is app\Destination, you should use like this :

$auditInfo=Input::all();
$appPrefix = 'app';
$modelName=$appPrefix . '\' . $auditInfo['modelName'];
$values=$modelName::find(1);

Upvotes: 5

Related Questions