📅  最后修改于: 2023-12-03 15:37:44.059000             🧑  作者: Mango
在 Laravel 中,每个模型类对应一个数据库表。默认情况下,Laravel 会使用模型类名的小写版本作为表名。但是,在某些情况下,我们可能需要指定一个不同的表名,例如当我们需要使用已经存在的数据库表时。
要为模型类指定表名,我们可以在模型类中定义一个 $table
属性。该属性包含数据库表的名称。
class User extends Model
{
/**
* 模型类对应的表名
*
* @var string
*/
protected $table = 'my_users_table';
}
在上面的例子中,我们将 User
模型类对应的表名设置为 my_users_table
。
如果你的数据库表名都有统一的前缀,你可以在 Laravel 的配置文件中设置一个默认的前缀。在 config/database.php
文件中,可以找到 connections.mysql.prefix
选项。你可以将其设置为你的默认前缀。
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => 'my_prefix_',
'strict' => false,
'engine' => null,
],
在上面的例子中,我们将默认的表前缀设置为 my_prefix_
。
现在,在我们定义模型类时,可以省略掉前缀。
class User extends Model
{
/**
* 模型类对应的表名
*
* @var string
*/
protected $table = 'users';
}
上面的例子中,users
实际上对应的是 my_prefix_users
数据库表。
在默认情况下,Laravel 会将模型类名转换成复数形式作为表名。
例如,User
模型类会对应一个 users
的数据库表。
如果我们想要改变这个行为,我们可以在模型类中定义一个 $plural
属性。
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
class Fish extends Model
{
/**
* 我们想要使用单数形式的表名(fish)
*
* @var bool
*/
public $plural = false;
/**
* Get the table associated with the model.
*
* @return string
*/
public function getTable()
{
if (isset($this->table)) {
return $this->table;
}
return Str::snake(class_basename($this), $this->plural).'_table';
}
}
上面的例子中,我们定义了一个 Fish
模型类,其中包含一个 $plural
属性,其值为 false
。这意味着,我们想要使用单数形式的表名。
在 getTable()
方法中,我们使用 Laravel 的 Str::snake()
方法来获取类名的小写蛇形形式作为表名。如果 $plural
属性为 false
,则不使用复数形式。
在 Laravel 中,我们可以轻松地指定一个模型类对应的数据库表名。我们可以在模型类中定义 $table
属性来手动指定表名,或者在配置文件中设置默认的表前缀。
此外,我们还可以选择使用复数或单数形式的表名。如果我们想要改变默认的行为,可以在模型类中定义 $plural
属性。