繁体   English   中英

Laravel Eloquent Model更改表名称在相关实例上的运行时

[英]Laravel Eloquent Model change table name on runtime in a related instance

我是Laravel的新手,并且在Laracast上也提出了问题,但到目前为止没有任何成功。

这是我的问题:我的数据库布局如下所示:

Table: categoryA_products
Table: categoryB_products
Table: categoryC_products

和默认情况下,Laravel用户表:

Table: user

我创建了两个Laravel Eloquent模型:

产品:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{

    // protected $table = '';

    public function users()
    {
        return $this->belongsTo( User::class );
    }

}

用户:

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    public function products()
        {
            return $this->hasMany( Product::class );
        }
}

由于每个产品都有不同的表名,因此我通常会为每个表创建1个模型,但由于它们都相似,因此我想在运行时定义模型表名。

我知道我可以使用“ $ product-> setTable()”来完成此操作,但是当我使用Laravel(hasMany和belongsTo)中的“ newRelatedInstance”类时,无法启动产品类并设置表。

有没有解决方法?

是的,我知道我可以创建一个类别表并将产品链接到每个类别,但这是一个虚构的数据库模型。 采用这种方法是有原因的,如果需要,我可以更详细地说明。 那对于这个示例来说是有意义的,但是我不能将其用于实时数据库。

对于每个“ 类别 ”,我都有一个带有模型的有效解决方案,但这非常混乱。

任何帮助,将不胜感激。

由于您无法加载关系,因此可以尝试引用并重新初始化它们,例如:

$relations = $product->getEagerLoads();
$attributes = $product->getOriginal();

table_name = 'categoryA_products'; // or categoryB_products or categoryC_products

$product->newQuery()
        ->newModelInstance($attributes)
        ->setTable($table_name)
        ->setEagerLoads($relations)
        ->...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM