Laravel 5 怎么实现一个 Model 操作不同表名而相同结构的数据表

问题大体如题,具体描述如下:

我建有多张同结构的数据表,只是数据表前缀不同,类似这样a_blog|b_blog|c_blog.

我想只建立一个Model就对这几张表进行操作,可是出现错误,下面贴出代码,谁有好的办法,帮解决一下,谢谢啦!

代码

namespace App;

use Illuminate\Database\Eloquent\Model;

/**
 * ###_blog模型
 */
class Blog extends Model
{
    private static $prefix;
    public function __construct( $prefix = '' )
    {
        self::$prefix = $prefix;
        parent::__construct();
    }
    protected $table = self::$prefix . '_blog';
    public $timestamps = false;
}

error

FatalErrorException in Blog.php line 17:
syntax error, unexpected '$prefix' (T_VARIABLE), expecting identifier 
(T_STRING) or class (T_CLASS)
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

有个项目也有这个需求(加后缀),搜了一下没啥好的解决方案,看了下源码自己写了个实现,顺便在这个三年没有回复的帖子留个脚印,没准有其他人需要,新人,希望不会误人子弟,手动捂脸

<?php

namespace App\Models;

trait TableSuffix
{
    private static $suffix;

    public static function suffix($suffix)
    {
        static::$suffix = $suffix;
    }

    public function __construct(array $attributes = [])
    {
        $this->table .= static::$suffix;
        parent::__construct($attributes);
    }
}

在需要进行分表的model里面use这个trait,然后再调用其他方法之前先执行suffix方法传入后缀

5年前 评论
wanghan

@Foris 大佬!我最近正好也要这需求,能不能写个详细的用法放到社区里?谢谢了

5年前 评论

@wanghan 楼上很好的用 trait 解决了。

4年前 评论

@Foris 时隔 4 年,登上这个账号发现了这个回复,首先感谢回复。 4 年前还在上学的我遇到这个问题,而现在已经在阿里好久都不碰 laravel 了,真的是好快。再说一下,trait 这个方法还是很巧妙的。

4年前 评论

@Kashin 最近在搞什么语言?

4年前 评论

@两说 在阿里当然是搞 spring 了 :joy:

4年前 评论
chinaz 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!