Laravel查询构建器和表名称

时间:2016-08-19 10:08:26

标签: laravel database-table laravel-query-builder

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

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

4 个答案:

答案 0 :(得分:4)

在您的查询中使用此项:

(new YourModel())->getTable()

示例:

DB:raw('SELECT * FROM '.(new User())->getTable().' WHERE id=3');

答案 1 :(得分:2)

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

clientDao1.insert

答案 2 :(得分:0)

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

考虑我的查询是:

requestAnimationFrame(render);

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

$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;
    }
}

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

答案 3 :(得分: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()

我没有更好的主意。