如何从Eloquent模型静态获取表名?

时间:2018-08-23 07:32:59

标签: php laravel eloquent lumen

现在,我有了这段代码来检查Eloquent模型连接到哪个表。

$s = new Something();
dd($s->getTable());

无论如何我是否可以在不实例化新Something对象的情况下获取表?

我在想像这样的代码:

Something::getTable();

但是会出现..should not be called statically错误。

5 个答案:

答案 0 :(得分:4)

您可以添加到模型中。

public static function getTableName()
{
    return (new self())->getTable();
}

然后您可以使用Something::getTableName()

获取表名

答案 1 :(得分:1)

这里稍作修改,以便您可以静态获取模型的表名。

  1. 定义特征:User
app/Traits/CanGetTableNameStatically.php
  1. 插入您的<?php namespace App\Traits; trait CanGetTableNameStatically { public static function tableName() { return with(new static)->getTable(); } } ,或者更好的是使用Model,所有其他模型都会对其进行扩展。

BaseModel

app/Models/BaseModel.php
  1. 在其他模型上,可以在Laravel的保留属性上设置自定义表名称:<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class BaseModel extends Model { use CanGetTableNameStatically; // ... }

protected $table

app/Models/Customer.php

用法:只需在任何地方致电<?php namespace App\Models\Master; use App\Models\BaseModel; class Customer extends BaseModel { protected $table = 'my_customers'; // ... }

视图中

YourModel::tableName()

加入时:

{{ \App\Models\Customer::tableName() }}

答案 2 :(得分:0)

$ model =新模型; echo $ model-> getTable(); 试试这个

答案 3 :(得分:0)

不是静态而是优雅的方法

with(new Something)->getTable();

答案 4 :(得分:0)

  class YourModel extends Model
{
    //

    public static $_table = "table_name";

}

然后像这样

YourModel::$_table