我正在开发一个包含多个"应用程序":文章,笔记,照片等的Laravel 5.5项目。
每个应用程序都应该有自己的目录/命名空间,包含其模型:
app/
Blog/
Article.php
Category.php
Notes/
Note.php
Category.php
...
当我运行此命令php artisan make:model --migration Blog/Category
时,它成功创建了app/Blog/Category.php
模型和App\Blog
命名空间,但关联的迁移创建了一个名为category
的表,而不是{{ 1}}。这是有问题的,因为我还需要创建blog_category
。
是否有一个前缀app/Notes/Category.php
表的技巧?如果我手动更改名称,Laravel会解析这些表格,还是我必须在每个模型中添加category
属性?
令人惊讶的是,模型命名空间和表名与Laravel逻辑之后的前缀无关?
答案 0 :(得分:2)
解决它有两种选择:
$table="your table name"
添加到每个模型答案 1 :(得分:0)
这个特性可以帮到你
use Illuminate\Support\Str;
trait TableNameResolver
{
public $base_namespace=__NAMESPACE__;
public function getTable()
{
if (! isset($this->table)) {
$this->setTable(str_replace(
'\\', '', Str::snake(Str::plural(trim(str_after(get_class($this),trim($this->base_namespace,'\\')),'\\')))
));
}
return $this->table;
}
}
答案 2 :(得分:0)
遵循the_hasanov的答案:
我做了一些改动,效果很好。
namespace App\Traits;
use Illuminate\Support\Str;
trait ModelTrait
{
/**
* Scopped Variables
*/
protected $table_prefix = "prefix_";
/**
* Appends prefix to table name
*
* @return $table
*/
public function getTable() {
$model = explode("\\", get_class($this));
$model = Str::lower(array_pop($model));
if (!isset($this->table)) $this->setTable(Str::plural($this->table_prefix . $model));
return $this->table;
}
}
添加这样的特征,并在模型中使用它,如下所示:
class Model {
use ModelTrait;
}