【问题标题】:Laravel: passing dynamic table name to model e.g protected $table = "$tablename"Laravel:将动态表名传递给模型,例如受保护的 $table = "$tablename"
【发布时间】:2018-10-20 11:46:02
【问题描述】:

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

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

那么,我想知道如何解决这个问题?

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

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 很陌生。

等待您的好意建议。

谢谢

【问题讨论】:

    标签: php mysql laravel laravel-5.6


    【解决方案1】:

    最好用fluent query builderdb

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

    例如

    从数据库中获取记录

    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'));
    

    【讨论】:

    • 谢谢。那么,我将如何更改“sys_cats::create($request->all());”查询 DB::table('cat1') 格式??
    • @Kashif for insert DB::table($tableName)->insert($request->all()); 更多不理解请阅读本文laravel.com/docs/5.7/queries
    • 感谢工作。但是,难道不是我可以在模型中动态使用表名吗?因为您的建议有效,但它不会自动添加“created_at”和“updated_at”字段等??
    • @Kashif 用于自动添加到迁移表中$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP')); $table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
    猜你喜欢
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2016-11-03
    相关资源
    最近更新 更多