Dan Kaufman
Dan Kaufman

Reputation: 115

Eloquent (WITHOUT Laravel) get data from table with dynamic name

I'm sure this is a totally simple question but for the life of me I'm stuck here- we're using Eloquent outside of Laravel due to PHP restrictions. I have a support ticket tracking app that I'm trying to update. The data structure of this app is such that each ticket is assigned a UUID on submission and a table with that UUID as its name is generated and all changes to the ticket are tracked as new entries in that table.

Following some tutorials on Eloquent I got our models and controllers set up and working but for each one I see that I'm defining the table name in the model itself. IE our ticket model is

namespace Models;
use \Illuminate\Database\Eloquent\Model;

class Ticket extends Model {
   protected $table = 'tickets';
   protected $fillable = [table columns here];
}

and anything called in the tickets controller correctly and successfully reads and writes data to our tickets table.

So... my question is: how would I go about reading/writing/creating/deleting those previously mentioned UUID tables?

I've tried the built in table selector (ie- DB::table(uuid here) and DB::setTable(uuid here) but to no avail. I get Fatal error: Call to undefined method Models\Database::setTable()

What I'm after is a model/controller that I can reuse for ANY dynamically-named table.

Upvotes: 0

Views: 680

Answers (1)

Felippe Duarte
Felippe Duarte

Reputation: 15131

You could create a generic model and dynamically set the table name, like this:

namespace Models;
use \Illuminate\Database\Eloquent\Model;

class FormerUUIDTicket extends Model {
   protected $table = 'some_table';
   protected $fillable = [table columns here];
}

class SomeController
{
    public function someAction()
    {
        $uuid = $_POST['uuid_field']; //some uuid, the table name
        $model = new FormerUUIDTicket;
        $model->setTable($uuid);
        return $model->get(); //do anything using eloquent with proper table
    }
}

Make sure that you always set the table name before use, or it will fail. Don't use static function either, for the same reason.

Upvotes: 1

Related Questions