📜  在模型 laravel 中定义表名 - PHP (1)

📅  最后修改于: 2023-12-03 15:37:44.059000             🧑  作者: Mango

在模型 Laravel 中定义表名 - PHP

在 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 属性。