Laravel 查询生成器和 table 名称
Laravel Query builder and table names
我注意到当我使用查询生成器时,我在不同的文件中写了很多数据库 table 名称。如果我要更改数据库 table 名称,我将不得不在我的项目中搜索和更改很多行。
这是您的 Laravel 人注意到并提出解决方案的问题吗?
我喜欢 Eloquent 方法,它使用 class 模型,而不是数据库名称;但对于某些查询,我认为查询生成器是更好的解决方案(尽管我不是这方面的专家)。
在您的查询中使用它:
(new YourModel())->getTable()
示例:
DB:raw('SELECT * FROM '.(new User())->getTable().' WHERE id=3');
如何使用 OOP 概念。 Laravel 是一个框架,因此没有人会阻止您使用基本的 PHP OOP 概念。这就是我所做的:
考虑我的查询是这样的:
$result=DB::table('myTable')->select()->get();
我所做的是制作一个 class 来保存所有 table 名字 :
class TableName
{
private $tableName= "myTable";
public function getTableName()
{
return $this->tableName;
}
public function setTableName($table_name)
{
$this->tableName = $table_name;
}
}
现在我所要做的就是使用文件中的对象调用一个方法我想使用 table 比如 :
$name = new TableName() ;
$result=DB::table($name->getTableName())->select()->get();
随心所欲使用。我不认为它是最好的解决方案,但它对我有用。希望对你有帮助
也许你可以扩展模型 class。
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()
我没有更好的主意。
如果您已经有一个 queryBuilder 对象,您可以获得 table 名称,如
$tableName = $query->getModel()->getTable();
我注意到当我使用查询生成器时,我在不同的文件中写了很多数据库 table 名称。如果我要更改数据库 table 名称,我将不得不在我的项目中搜索和更改很多行。 这是您的 Laravel 人注意到并提出解决方案的问题吗?
我喜欢 Eloquent 方法,它使用 class 模型,而不是数据库名称;但对于某些查询,我认为查询生成器是更好的解决方案(尽管我不是这方面的专家)。
在您的查询中使用它:
(new YourModel())->getTable()
示例:
DB:raw('SELECT * FROM '.(new User())->getTable().' WHERE id=3');
如何使用 OOP 概念。 Laravel 是一个框架,因此没有人会阻止您使用基本的 PHP OOP 概念。这就是我所做的:
考虑我的查询是这样的:
$result=DB::table('myTable')->select()->get();
我所做的是制作一个 class 来保存所有 table 名字 :
class TableName
{
private $tableName= "myTable";
public function getTableName()
{
return $this->tableName;
}
public function setTableName($table_name)
{
$this->tableName = $table_name;
}
}
现在我所要做的就是使用文件中的对象调用一个方法我想使用 table 比如 :
$name = new TableName() ;
$result=DB::table($name->getTableName())->select()->get();
随心所欲使用。我不认为它是最好的解决方案,但它对我有用。希望对你有帮助
也许你可以扩展模型 class。
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()
我没有更好的主意。
如果您已经有一个 queryBuilder 对象,您可以获得 table 名称,如
$tableName = $query->getModel()->getTable();