Laravel:将动态表名称传递给模型,例如,受保护的$ table =“ $ tablename”

时间:2018-10-20 11:46:03

标签: php mysql laravel laravel-5.6

所以我的代码成功创建了结构完全相同的动态表(出于我自己的原因,我需要这种方式)。

但是,当我想将数据添加到任何动态创建的表中时(因为我没有模型),就会出现问题,就像我通常创建表/模型时那样。

所以,我想知道如何解决这个问题?

我可以以某种方式使用这种逻辑吗?

namespace App;

use Illuminate\Database\Eloquent\Model;

class sys_cats extends Model
{
    // I know we can't use variable in class like this
    // but this is just to explain what kind of logic I have
    // in mind. 

     $category = Session::get('catName');

     protected $table = "$category";
     protected $primarykey = 'id';
     protected $fillable = [
     .
     .
     .

因此,我假设以这种方式,我们可以使用此模型将表名动态更改为存储在会话变量中的名称。

因此我们不必为每个表创建一个单独的模型。

这可以实现吗?还是每次在数据库中动态创建表时也必须创建一个单独的模型文件?

很抱歉,如果我的建议本质上是错误的或任何相关的内容。我是PHP和Laravel的新手。

等待您的建议。

谢谢

1 个答案:

答案 0 :(得分:0)

更好地使用fluent query builder db

  

u可以通过插入,更新,读取,删除来动态添加表名   操作

例如

  

从数据库获取记录

DB::table($tableName)->all()
  

用于插入

 DB::table($tableName)->insert(['name' => $name]);
  

用于自动添加的created_at和updated_at添加迁移

$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));