5

我注意到,当我使用查询生成器时,我在不同的文件中写了很多数据库表名。如果我要更改数据库表名,我将不得不在我的项目中搜索和更改相当多的行。这是您的 Laravel 人员注意到并提出解决方案的问题吗?

我喜欢使用类模型而不是数据库名称的 Eloquent 方法;但是对于某些查询,我认为查询生成器是一个更好的解决方案(尽管我不是这方面的专家)。

4

4 回答 4

8

在您的查询中使用它:

(new YourModel())->getTable()

例子 :

DB:raw('SELECT * FROM '.(new User())->getTable().' WHERE id=3');
于 2016-08-19T10:18:55.723 回答
6

如果您已经有一个 queryBuilder 对象,您可以获得表名,例如

$tableName = $query->getModel()->getTable();

于 2020-08-04T21:22:16.947 回答
0

也许你可以扩展模型类。

CModel extend Model {

   protected static $tableName;

   public static getTableName(){
       if(static::$tableName)
          return static::$tableName;

       /* if you create a "reference break" you don't have to *
       /* create "protected static $tableName" row in your all model */

       $table = (new static())->getTable();
       return static::$tableName = &$table;
   }
}

YourModel extends CModel {...}

比你可以使用

YourModel::getTableName()

我没有更好的主意。

于 2018-12-18T16:32:48.580 回答
0

如何使用 OOP 概念。Laravel 是一个框架,所以没有人会阻止你使用基本的 PHP OOP 概念。这就是我所做的:

考虑我的查询是这样的:

$result=DB::table('myTable')->select()->get();

我所做的是创建一个包含所有表名的类:

class TableName
{
    private $tableName= "myTable";
    public function getTableName()
    {
        return $this->tableName;
    }

    public function setTableName($table_name)
    {
        $this->tableName = $table_name;
    }
}

现在我所要做的就是使用文件中的对象调用一个方法,我想使用如下表:

$name = new TableName() ;
$result=DB::table($name->getTableName())->select()->get();

随时随地使用。我不认为它是最好的解决方案,但它对我有用。希望能帮助到你

于 2016-08-19T11:36:16.007 回答