Laravel雄伟的模型在相关实例中的运行时更改表名称



我是拉拉维尔(Laravel(的新手,还问了关于laracast的问题,没有任何成功。

这是我的问题:我有一个类似的数据库布局:

Table: categoryA_products
Table: categoryB_products
Table: categoryC_products

和默认值Laravel用户表:

Table: user

我创建了两个Laravel雄辩的模型:

产品:

namespace App;
use IlluminateDatabaseEloquentModel;
class Product extends Model
{
    // protected $table = '';
    public function users()
    {
        return $this->belongsTo( User::class );
    }
}

用户:

namespace App;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
    public function products()
        {
            return $this->hasMany( Product::class );
        }
}

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

我知道我可以使用" $ product-> steatable(("来做到这一点,但是当我使用laravel(Hasmany and Altersto(的" NewRealedInstance"类时,我无法启动产品类并设置表。

是否有解决方法?

是的,我知道我可以创建一个类别表并将产品链接到每个类别,但这是一个虚构的数据库模型。这种方法是有原因的,如果需要,我可以详细解释它。也就是说,这对这个示例很有意义,但我无法将其用于实时数据库。

我有一个有效的解决方案,每个" 类别"都有一个模型,但这很混乱。

任何帮助将不胜感激。

由于您无法加载关系,因此您可以尝试引用和重新定位它们,例如:

$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)
        ->...

相关内容

  • 没有找到相关文章

最新更新